PUBLIC RELEASE
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
name: CI Workflow
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- '*'
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: Cavemanon/Exit-665
|
||||
token: ${{ secrets.RELEASE_SMITH_TOKEN }}
|
||||
|
||||
- name: Set Godot Version
|
||||
id: vars
|
||||
run: echo "GODOT_VERSION=4.4-stable" >> $GITHUB_ENV
|
||||
|
||||
- name: Install dependencies and get Godot
|
||||
run: |
|
||||
apt update
|
||||
apt install wget zip unzip -y
|
||||
wget https://github.com/godotengine/godot/releases/download/${{ env.GODOT_VERSION }}/Godot_v${{ env.GODOT_VERSION }}_linux.x86_64.zip -O /tmp/godot.zip
|
||||
unzip /tmp/godot.zip -d /tmp/
|
||||
mv /tmp/Godot_v${{ env.GODOT_VERSION }}_linux.x86_64 /usr/bin/godot
|
||||
|
||||
- name: Get Export Templates
|
||||
run: |
|
||||
mkdir -p /root/.local/share/godot/export_templates/${{ env.GODOT_VERSION }}.stable/
|
||||
wget https://github.com/godotengine/godot/releases/download/${{ env.GODOT_VERSION }}/Godot_v${{ env.GODOT_VERSION }}_export_templates.tpz -O /tmp/templates.zip
|
||||
unzip /tmp/templates.zip -d /root/.local/share/godot/export_templates/${{ env.GODOT_VERSION }}
|
||||
|
||||
- name: Export Software
|
||||
run: |
|
||||
mkdir dist
|
||||
/usr/bin/godot --export-release --headless "Linux/X11" dist/${{ github.event.repository.name }}-linux-.x86_64
|
||||
/usr/bin/godot --export-release --headless "Windows Desktop" dist/${{ github.event.repository.name }}-windows-.exe
|
||||
/usr/bin/godot --export-release --headless "Mac OSX" dist/${{ github.event.repository.name }}-mac-.zip
|
||||
|
||||
- name: Install curl and download push script
|
||||
run: |
|
||||
apt update
|
||||
apt install curl bash -y
|
||||
curl https://git.cavemanon.xyz/Cavemanon/Woodpecker-Webdav/raw/branch/master/push.sh > /tmp/push.sh
|
||||
chmod +x /tmp/push.sh
|
||||
PLUGIN_USERNAME=ReleaseSmith PLUGIN_PASSWORD=${{ secrets.RELEASE_SMITH_NEXTCLOUD_PASSWORD }} PLUGIN_DESTINATION=https://cloud.dev.cavemanon.xyz/remote.php/dav/files/ReleaseSmith/Wani/Internal%20Builds/${{ github.ref_name }}/ PLUGIN_MAKE_FOLDER_AT=https://cloud.dev.cavemanon.xyz/remote.php/dav/files/ReleaseSmith/Wani/Internal%20Builds/${{ github.ref_name }}/ PLUGIN_FILE_GLOB=*-dists/* /tmp/push.sh
|
||||
|
||||
- name: Upload Release
|
||||
uses: https://gitea.com/actions/release-action@main
|
||||
with:
|
||||
files: dist/*
|
||||
api_key: '${{ secrets.RELEASE_SMITH_TOKEN }}'
|
||||
+157
@@ -0,0 +1,157 @@
|
||||
.godot/
|
||||
|
||||
# Mono-specific ignores
|
||||
.mono/
|
||||
data_*/
|
||||
|
||||
|
||||
|
||||
# ---> Python
|
||||
# Byte-compiled / optimized / DLL files
|
||||
__pycache__/
|
||||
*.py[cod]
|
||||
*$py.class
|
||||
|
||||
# C extensions
|
||||
*.so
|
||||
|
||||
# Distribution / packaging
|
||||
.Python
|
||||
build/
|
||||
develop-eggs/
|
||||
dist/
|
||||
downloads/
|
||||
eggs/
|
||||
.eggs/
|
||||
lib/
|
||||
lib64/
|
||||
parts/
|
||||
sdist/
|
||||
var/
|
||||
wheels/
|
||||
share/python-wheels/
|
||||
*.egg-info/
|
||||
.installed.cfg
|
||||
*.egg
|
||||
MANIFEST
|
||||
|
||||
# PyInstaller
|
||||
# Usually these files are written by a python script from a template
|
||||
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
||||
*.manifest
|
||||
*.spec
|
||||
|
||||
# Installer logs
|
||||
pip-log.txt
|
||||
pip-delete-this-directory.txt
|
||||
|
||||
# Unit test / coverage reports
|
||||
htmlcov/
|
||||
.tox/
|
||||
.nox/
|
||||
.coverage
|
||||
.coverage.*
|
||||
.cache
|
||||
nosetests.xml
|
||||
coverage.xml
|
||||
*.cover
|
||||
*.py,cover
|
||||
.hypothesis/
|
||||
.pytest_cache/
|
||||
cover/
|
||||
|
||||
# Translations
|
||||
*.mo
|
||||
*.pot
|
||||
|
||||
# Django stuff:
|
||||
*.log
|
||||
local_settings.py
|
||||
db.sqlite3
|
||||
db.sqlite3-journal
|
||||
|
||||
# Flask stuff:
|
||||
instance/
|
||||
.webassets-cache
|
||||
|
||||
# Scrapy stuff:
|
||||
.scrapy
|
||||
|
||||
# Sphinx documentation
|
||||
docs/_build/
|
||||
|
||||
# PyBuilder
|
||||
.pybuilder/
|
||||
target/
|
||||
|
||||
# Jupyter Notebook
|
||||
.ipynb_checkpoints
|
||||
|
||||
# IPython
|
||||
profile_default/
|
||||
ipython_config.py
|
||||
|
||||
# pyenv
|
||||
# For a library or package, you might want to ignore these files since the code is
|
||||
# intended to run in multiple environments; otherwise, check them in:
|
||||
# .python-version
|
||||
|
||||
# pipenv
|
||||
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
||||
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
||||
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
||||
# install all needed dependencies.
|
||||
#Pipfile.lock
|
||||
|
||||
# PEP 582; used by e.g. github.com/David-OConnor/pyflow
|
||||
__pypackages__/
|
||||
|
||||
# Celery stuff
|
||||
celerybeat-schedule
|
||||
celerybeat.pid
|
||||
|
||||
# SageMath parsed files
|
||||
*.sage.py
|
||||
|
||||
# Environments
|
||||
.env
|
||||
.venv
|
||||
env/
|
||||
venv/
|
||||
ENV/
|
||||
env.bak/
|
||||
venv.bak/
|
||||
|
||||
# Spyder project settings
|
||||
.spyderproject
|
||||
.spyproject
|
||||
|
||||
# Rope project settings
|
||||
.ropeproject
|
||||
|
||||
# mkdocs documentation
|
||||
/site
|
||||
|
||||
# mypy
|
||||
.mypy_cache/
|
||||
.dmypy.json
|
||||
dmypy.json
|
||||
|
||||
# Pyre type checker
|
||||
.pyre/
|
||||
|
||||
# pytype static type analyzer
|
||||
.pytype/
|
||||
|
||||
# Cython debug symbols
|
||||
cython_debug/
|
||||
|
||||
# LaTeX Cancer
|
||||
todo/*.aux
|
||||
todo/*.fdb_latexmk
|
||||
todo/*.fls
|
||||
todo/*.log
|
||||
todo/*.out
|
||||
|
||||
# Intellij
|
||||
.idea
|
||||
@@ -0,0 +1,74 @@
|
||||
@tool
|
||||
extends Area2D
|
||||
class_name CutsceneInteractable
|
||||
|
||||
|
||||
##Target node for this Interactable to trigger when used.
|
||||
@export var target: Node
|
||||
##Method that gets called on the node specified by target when interacted
|
||||
@export var call_method: String
|
||||
##Optional info that can be sent along with the method called
|
||||
@export var method_info: String
|
||||
##Icon to show over the player when inside the interactable's area.
|
||||
##Also is the interactable's editor icon.
|
||||
@export var icon: Texture2D:
|
||||
#Changing this exported value in the editor will automatically update the
|
||||
#editor_icon's texture because this script is marked as a @tool at the top
|
||||
set(newTexture):
|
||||
icon = newTexture
|
||||
if Engine.is_editor_hint():
|
||||
if editor_icon:
|
||||
editor_icon.texture = icon
|
||||
|
||||
##If true, this interactable can be interacted with
|
||||
@export var enabled: bool = true
|
||||
##If true, this interactable will pause the overworld upon use
|
||||
@export var pauseOnUse: bool = true
|
||||
##If true, this interactable will disable itself upon use (but doesn't delete it)
|
||||
@export var oneShot: bool = false
|
||||
##If true, this interactable will queue_free() itself upon use
|
||||
@export var deleteOnUse: bool = false
|
||||
##Placeholder variable for triggering a cutscene upon use
|
||||
@export var cutsceneTarget: Node
|
||||
|
||||
@onready var editor_icon: Sprite2D = $EditorIcon
|
||||
|
||||
signal interacted
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
#Hide the editor_icon when in game
|
||||
if editor_icon and icon:
|
||||
editor_icon.texture = icon
|
||||
if not Engine.is_editor_hint():
|
||||
editor_icon.visible = false
|
||||
|
||||
func _input(event):
|
||||
if event.is_action_pressed("player_use"):
|
||||
if has_overlapping_areas():
|
||||
interacted.emit()
|
||||
interact()
|
||||
|
||||
#Called when the player presses "Use" while inside this interactable's area
|
||||
func interact():
|
||||
#First make sure the target node exists
|
||||
if target:
|
||||
#Then check if it has the method we want to call
|
||||
if target.has_method(call_method):
|
||||
#If so then epic win! We can call it (provided this interactable is enabled).
|
||||
if enabled:
|
||||
target.call(call_method)
|
||||
#If oneShot is set to true then disable this interactable after calling it
|
||||
if oneShot:
|
||||
enabled = false
|
||||
#If deleteOnUse is set to true then delete this interactable with queue_free()
|
||||
if deleteOnUse:
|
||||
queue_free()
|
||||
else:
|
||||
push_error('Node: ' + str(target) + ' does not have the method: ' + call_method)
|
||||
else:
|
||||
push_error('Interactable could not find node: ' + str(target))
|
||||
|
||||
#Setter function for enabled property
|
||||
func set_enabled(value:bool) -> void:
|
||||
enabled = value
|
||||
@@ -0,0 +1 @@
|
||||
uid://bmoaeiuu2v383
|
||||
@@ -0,0 +1,18 @@
|
||||
[gd_scene load_steps=4 format=3 uid="uid://hfkeqrxcg21x"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://bmoaeiuu2v383" path="res://Cutscenes/Interactables/2d_base_interactable.gd" id="1_cggsk"]
|
||||
[ext_resource type="Texture2D" uid="uid://b0b2nnyemdqsf" path="res://assets/images/misc/defaultInteractableIcon.png" id="2_hqj0b"]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_8dejw"]
|
||||
size = Vector2(90, 84)
|
||||
|
||||
[node name="2dBaseInteractable" type="Area2D"]
|
||||
collision_mask = 2
|
||||
script = ExtResource("1_cggsk")
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
shape = SubResource("RectangleShape2D_8dejw")
|
||||
|
||||
[node name="EditorIcon" type="Sprite2D" parent="."]
|
||||
scale = Vector2(0.5, 0.5)
|
||||
texture = ExtResource("2_hqj0b")
|
||||
@@ -0,0 +1,11 @@
|
||||
extends CutsceneInteractable
|
||||
|
||||
@export var dialogPath: String
|
||||
|
||||
func examine() -> void:
|
||||
if dialogPath:
|
||||
if pauseOnUse:
|
||||
get_parent().playerControlEnabled = false # VERY shitty and needs to be changed, but we'll just asume for now that our parent has this var and we won't bother activating it again
|
||||
DialogManager.start_cutscene_dialog(dialogPath)
|
||||
else:
|
||||
push_error("You need to specify a dialogPath for this POI!")
|
||||
@@ -0,0 +1 @@
|
||||
uid://c3ubyfw1e33wv
|
||||
@@ -0,0 +1,10 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://buwyv6bcxnbp2"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://hfkeqrxcg21x" path="res://Cutscenes/Interactables/2d_base_interactable.tscn" id="1_etvuv"]
|
||||
[ext_resource type="Script" uid="uid://c3ubyfw1e33wv" path="res://Cutscenes/Interactables/2d_cutscene_interactable.gd" id="2_16tg0"]
|
||||
|
||||
[node name="2dCutsceneInteractable" node_paths=PackedStringArray("target") instance=ExtResource("1_etvuv")]
|
||||
script = ExtResource("2_16tg0")
|
||||
dialogPath = ""
|
||||
target = NodePath(".")
|
||||
call_method = "examine"
|
||||
@@ -0,0 +1,45 @@
|
||||
@tool
|
||||
extends CutsceneInteractable
|
||||
|
||||
@export var dialogPath: String
|
||||
|
||||
|
||||
func examine() -> void:
|
||||
if dialogPath:
|
||||
_start_dialog(dialogPath, pauseOnUse)
|
||||
else:
|
||||
push_error("You need to specify a dialogPath for this POI!")
|
||||
|
||||
|
||||
func _start_dialog(timelineFile: String, pauseCutscene: bool = true):
|
||||
#First check that there isn't a timeline already running
|
||||
if Dialogic.current_timeline != null:
|
||||
return
|
||||
|
||||
#Grab the level world and pause it only if pauseGame is true
|
||||
if pauseCutscene:
|
||||
_set_cutscene_paused()
|
||||
#Connect the timeline_ended signal to the _on_dialog_ended function
|
||||
Dialogic.timeline_ended.connect(_on_dialog_ended)
|
||||
Dialogic.start(timelineFile)
|
||||
get_viewport().set_input_as_handled()
|
||||
|
||||
func _on_dialog_ended() -> void:
|
||||
#Grab the level world and unpause it if it was paused before
|
||||
_set_cutscene_paused(false)
|
||||
#Disconnect the timeline_ended signal
|
||||
Dialogic.timeline_ended.disconnect(_on_dialog_ended)
|
||||
print("Dialog Ended")
|
||||
|
||||
|
||||
func _set_cutscene_paused(paused = true) -> void:
|
||||
var world = get_parent() # We asume that we are the direct child of a cutscene
|
||||
if world:
|
||||
if paused:
|
||||
#This pauses the overworld and everything that is a child of it
|
||||
world.process_mode = ProcessMode.PROCESS_MODE_DISABLED
|
||||
else:
|
||||
#This unpauses the overworld
|
||||
world.process_mode = ProcessMode.PROCESS_MODE_INHERIT
|
||||
else:
|
||||
push_error("Tried setting the overworld's ProcessMode but couldn't find the overworld!")
|
||||
@@ -0,0 +1 @@
|
||||
uid://bowr4c253ymw7
|
||||
@@ -0,0 +1,10 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://bx42jba4lns65"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://bowr4c253ymw7" path="res://Cutscenes/Interactables/2d_poi_interactable.gd" id="1_84a4v"]
|
||||
[ext_resource type="PackedScene" uid="uid://hfkeqrxcg21x" path="res://Cutscenes/Interactables/2d_base_interactable.tscn" id="1_b72m5"]
|
||||
|
||||
[node name="2dBaseInteractable" node_paths=PackedStringArray("target") instance=ExtResource("1_b72m5")]
|
||||
script = ExtResource("1_84a4v")
|
||||
dialogPath = ""
|
||||
target = NodePath(".")
|
||||
call_method = "examine"
|
||||
@@ -0,0 +1,24 @@
|
||||
extends Area2D
|
||||
var has_interacted = false
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
if has_overlapping_areas() and Dialogic.current_timeline == null:
|
||||
for area in get_overlapping_areas():
|
||||
if area.enabled:
|
||||
if area.icon:
|
||||
%InteractionIndicator.texture = area.icon
|
||||
if not has_interacted:
|
||||
%InteractionTutorial.visible = true
|
||||
%InteractionIndicator.visible = true
|
||||
return
|
||||
%InteractionIndicator.visible = false
|
||||
%InteractionTutorial.visible = false
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
var interactables = get_tree().get_nodes_in_group("BedroomInteractables") + get_tree().get_nodes_in_group("LivingRoomInteractables")
|
||||
for interactable in interactables:
|
||||
interactable.interacted.connect(_interacted)
|
||||
|
||||
func _interacted() -> void:
|
||||
has_interacted = true
|
||||
@@ -0,0 +1 @@
|
||||
uid://wmjclosjhlr0
|
||||
@@ -0,0 +1,42 @@
|
||||
extends Control
|
||||
|
||||
##Delay to add to the scene before automatically starting the animation
|
||||
@export var startDelay := 3.0
|
||||
##Delay to add at the end of the animation before fading to black
|
||||
@export var endDelay := 1.0
|
||||
##Next scene to load once animation finishes
|
||||
@export var nextScene_ : PackedScene
|
||||
@onready var animation_player: AnimationPlayer = $AnimationPlayer
|
||||
@onready var morgan_animation: AnimatedSprite2D = $SpriteHolder/LightsOn/MorganAnimation
|
||||
@onready var morgan_sounds_container: Node2D = $SpriteHolder/LightsOn/MorganAnimation/SoundsContainer
|
||||
|
||||
##Tracks when the footstep sfx should be played. Controlled by AnimationPlayer.
|
||||
##Must be exported var so AnimationPlayer can modify it.
|
||||
@export var playFootsteps := false
|
||||
|
||||
var timeline = "demo_bathroom_1"
|
||||
|
||||
func _ready() -> void:
|
||||
await get_tree().create_timer(1.0).timeout
|
||||
TeaserMusicManager.playMusic(TeaserMusicManager.apartmentMusic)
|
||||
await get_tree().create_timer(startDelay).timeout
|
||||
DialogManager.start_cutscene_dialog(timeline)
|
||||
|
||||
func _on_dialog_ended() -> void:
|
||||
print("Dialog end!")
|
||||
await get_tree().create_timer(endDelay).timeout
|
||||
animation_player.play("FadeOutAmbience")
|
||||
SceneManager.load_raw_packedScene(nextScene_, true, 0.25, 0.0, 0.25, 2.0)
|
||||
|
||||
func fadeMusicOut() -> void:
|
||||
TeaserMusicManager.stopMusic()
|
||||
|
||||
|
||||
func footstep_player(sprite_animation: AnimatedSprite2D, animation_player: AnimationPlayer, sounds_container: Node2D) -> void:
|
||||
if playFootsteps:
|
||||
if sprite_animation.get_frame() == 1 or sprite_animation.get_frame() == 3:
|
||||
var chosenStepSFX : AudioStreamPlayer2D = sounds_container.get_children()[randi() % sounds_container.get_children().size()]
|
||||
chosenStepSFX.play()
|
||||
|
||||
func _on_morgan_animation_frame_changed() -> void:
|
||||
footstep_player(morgan_animation, animation_player, morgan_sounds_container)
|
||||
@@ -0,0 +1 @@
|
||||
uid://ber7oioc5x51c
|
||||
@@ -0,0 +1,591 @@
|
||||
[gd_scene load_steps=33 format=3 uid="uid://bjoinf0i1vjel"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://ber7oioc5x51c" path="res://Cutscenes/bathroom_1_scene.gd" id="1_aj5dx"]
|
||||
[ext_resource type="PackedScene" uid="uid://cewt73cgsvbdp" path="res://Cutscenes/fp_office_1_scene.tscn" id="2_0bej6"]
|
||||
[ext_resource type="Texture2D" uid="uid://dn42ud5ylkege" path="res://assets/animations/Morgan Bathroom Scene Demo/bathroom bg.png" id="2_6cvv6"]
|
||||
[ext_resource type="Texture2D" uid="uid://btq0yymwsov54" path="res://assets/animations/Morgan Bathroom Scene Demo/morgan reflection 1.png" id="3_8l70x"]
|
||||
[ext_resource type="Texture2D" uid="uid://co6dwhs0l7sp0" path="res://assets/animations/Morgan Bathroom Scene Demo/morgan bathroom 1.png" id="4_s4kiy"]
|
||||
[ext_resource type="Texture2D" uid="uid://cxy6hogbrg6yb" path="res://assets/animations/Morgan Bathroom Scene Demo/m_unbandaged_neutral_left.png" id="6_2w4fy"]
|
||||
[ext_resource type="Texture2D" uid="uid://687dn4vntyfj" path="res://assets/animations/Morgan Bathroom Scene Demo/m_unbandaged_neutral_right.png" id="7_7hveh"]
|
||||
[ext_resource type="Texture2D" uid="uid://d0h0j4fyiojvd" path="res://assets/animations/Morgan Bathroom Scene Demo/Walking/m_unbandaged_walk_1.png" id="8_c4xln"]
|
||||
[ext_resource type="Texture2D" uid="uid://dr510vvmyccn1" path="res://assets/animations/Morgan Bathroom Scene Demo/Walking/m_unbandaged_walk_2.png" id="9_mh1xp"]
|
||||
[ext_resource type="Texture2D" uid="uid://bec67t0hscc4p" path="res://assets/animations/Morgan Bathroom Scene Demo/Walking/m_unbandaged_walk_3.png" id="10_i0mns"]
|
||||
[ext_resource type="Texture2D" uid="uid://bwjjn0st4nlhx" path="res://assets/animations/Morgan Bathroom Scene Demo/Walking/m_unbandaged_walk_4.png" id="11_u6o3t"]
|
||||
[ext_resource type="Texture2D" uid="uid://dtnuh2h2t1jjg" path="res://assets/animations/Morgan Bathroom Scene Demo/morgan sitting head down.png" id="12_o0nao"]
|
||||
[ext_resource type="AudioStream" uid="uid://ergdl7k7oxeu" path="res://assets/audio/Teaser/footsteps/concrete/1.ogg" id="12_q6oqr"]
|
||||
[ext_resource type="Texture2D" uid="uid://blsoyqh10rfa0" path="res://assets/animations/Morgan Bathroom Scene Demo/bathroom bg dark.png" id="13_08ibi"]
|
||||
[ext_resource type="AudioStream" uid="uid://4hfgbatfbuls" path="res://assets/audio/Teaser/footsteps/concrete/2.ogg" id="13_bbads"]
|
||||
[ext_resource type="AudioStream" uid="uid://rr2u4863avep" path="res://assets/audio/Teaser/footsteps/concrete/3.ogg" id="14_l3edt"]
|
||||
[ext_resource type="Texture2D" uid="uid://sndwna2nxjl" path="res://assets/animations/Morgan Bathroom Scene Demo/morgan sitting head up.png" id="14_w2aol"]
|
||||
[ext_resource type="Texture2D" uid="uid://diisi80ybbu7y" path="res://assets/animations/Morgan Bathroom Scene Demo/bathroom overlay dark.png" id="15_02pye"]
|
||||
[ext_resource type="AudioStream" uid="uid://c4iidio56r7n8" path="res://assets/audio/Teaser/footsteps/concrete/4.ogg" id="15_b8aj3"]
|
||||
[ext_resource type="AudioStream" uid="uid://dagyawkkfifhw" path="res://assets/audio/Teaser/ambience/hallow.ogg" id="16_a3ovf"]
|
||||
[ext_resource type="AudioStream" uid="uid://c01hvq7vsv0t5" path="res://assets/audio/Teaser/footsteps/concrete/5.ogg" id="16_q43hq"]
|
||||
[ext_resource type="AudioStream" uid="uid://b1gwdjm8iajom" path="res://assets/audio/Teaser/footsteps/concrete/6.ogg" id="17_blv4t"]
|
||||
[ext_resource type="AudioStream" uid="uid://bhqy615ka858s" path="res://assets/audio/Teaser/foley/clothing_rustle.ogg" id="23_bbads"]
|
||||
|
||||
[sub_resource type="SpriteFrames" id="SpriteFrames_3ajjw"]
|
||||
animations = [{
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("6_2w4fy")
|
||||
}],
|
||||
"loop": false,
|
||||
"name": &"StandLeft",
|
||||
"speed": 5.0
|
||||
}, {
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("7_7hveh")
|
||||
}],
|
||||
"loop": false,
|
||||
"name": &"StandRight",
|
||||
"speed": 5.0
|
||||
}, {
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("8_c4xln")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("9_mh1xp")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("10_i0mns")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("11_u6o3t")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"Walking",
|
||||
"speed": 5.0
|
||||
}]
|
||||
|
||||
[sub_resource type="SpriteFrames" id="SpriteFrames_xegdv"]
|
||||
animations = [{
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("12_o0nao")
|
||||
}],
|
||||
"loop": false,
|
||||
"name": &"LookDown",
|
||||
"speed": 5.0
|
||||
}, {
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("14_w2aol")
|
||||
}],
|
||||
"loop": false,
|
||||
"name": &"LookUp",
|
||||
"speed": 5.0
|
||||
}]
|
||||
|
||||
[sub_resource type="Animation" id="Animation_3sgw7"]
|
||||
resource_name = "FadeOutAmbience"
|
||||
length = 3.0
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("DarkAmbience:volume_db")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 3),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [0.0, -80.0]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_oiuit"]
|
||||
resource_name = "FadeToDark"
|
||||
length = 5.0
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("BlackOverlay:color")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 2, 3, 5),
|
||||
"transitions": PackedFloat32Array(1, 1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Color(0, 0, 0, 0), Color(0, 0, 0, 1), Color(0, 0, 0, 1), Color(0, 0, 0, 0)]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("SpriteHolder/LightsOn:visible")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0, 2.5),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 1,
|
||||
"values": [true, false]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("SpriteHolder/LightsOff:visible")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0, 2.5),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 1,
|
||||
"values": [false, true]
|
||||
}
|
||||
tracks/3/type = "method"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath(".")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"times": PackedFloat32Array(0.0333333),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"values": [{
|
||||
"args": [],
|
||||
"method": &"fadeMusicOut"
|
||||
}]
|
||||
}
|
||||
tracks/4/type = "value"
|
||||
tracks/4/imported = false
|
||||
tracks/4/enabled = true
|
||||
tracks/4/path = NodePath("DarkAmbience:volume_db")
|
||||
tracks/4/interp = 1
|
||||
tracks/4/loop_wrap = true
|
||||
tracks/4/keys = {
|
||||
"times": PackedFloat32Array(0, 2, 4),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [-80.0, -80.0, 0.0]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_1pvd7"]
|
||||
resource_name = "LookLeft"
|
||||
length = 0.1
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("SpriteHolder/LightsOn/MorganAnimation:position")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector2(186, 33)]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("SpriteHolder/LightsOn/MorganAnimation:animation")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [&"StandLeft"]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("SpriteHolder/LightsOn/MorganAnimation:flip_h")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [true]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_2e1y4"]
|
||||
length = 0.001
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("SpriteHolder/LightsOn/MorganMirror:visible")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [true]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("SpriteHolder/LightsOn/MorganAnimation:visible")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("SpriteHolder/LightsOn/MorganAnimation:position")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector2(0, 33)]
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("SpriteHolder/LightsOn/MorganAnimation:animation")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [&"Walking"]
|
||||
}
|
||||
tracks/4/type = "value"
|
||||
tracks/4/imported = false
|
||||
tracks/4/enabled = true
|
||||
tracks/4/path = NodePath("SpriteHolder/LightsOn/Reflection:visible")
|
||||
tracks/4/interp = 1
|
||||
tracks/4/loop_wrap = true
|
||||
tracks/4/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [true]
|
||||
}
|
||||
tracks/5/type = "value"
|
||||
tracks/5/imported = false
|
||||
tracks/5/enabled = true
|
||||
tracks/5/path = NodePath("SpriteHolder/LightsOn/MorganAnimation:flip_h")
|
||||
tracks/5/interp = 1
|
||||
tracks/5/loop_wrap = true
|
||||
tracks/5/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/6/type = "value"
|
||||
tracks/6/imported = false
|
||||
tracks/6/enabled = true
|
||||
tracks/6/path = NodePath("SpriteHolder/LightsOn/MorganSit:visible")
|
||||
tracks/6/interp = 1
|
||||
tracks/6/loop_wrap = true
|
||||
tracks/6/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/7/type = "value"
|
||||
tracks/7/imported = false
|
||||
tracks/7/enabled = true
|
||||
tracks/7/path = NodePath("BlackOverlay:color")
|
||||
tracks/7/interp = 1
|
||||
tracks/7/loop_wrap = true
|
||||
tracks/7/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Color(0, 0, 0, 0)]
|
||||
}
|
||||
tracks/8/type = "value"
|
||||
tracks/8/imported = false
|
||||
tracks/8/enabled = true
|
||||
tracks/8/path = NodePath("SpriteHolder/LightsOn:visible")
|
||||
tracks/8/interp = 1
|
||||
tracks/8/loop_wrap = true
|
||||
tracks/8/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [true]
|
||||
}
|
||||
tracks/9/type = "value"
|
||||
tracks/9/imported = false
|
||||
tracks/9/enabled = true
|
||||
tracks/9/path = NodePath("SpriteHolder/LightsOff:visible")
|
||||
tracks/9/interp = 1
|
||||
tracks/9/loop_wrap = true
|
||||
tracks/9/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/10/type = "value"
|
||||
tracks/10/imported = false
|
||||
tracks/10/enabled = true
|
||||
tracks/10/path = NodePath("DarkAmbience:volume_db")
|
||||
tracks/10/interp = 1
|
||||
tracks/10/loop_wrap = true
|
||||
tracks/10/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [-80.0]
|
||||
}
|
||||
tracks/11/type = "value"
|
||||
tracks/11/imported = false
|
||||
tracks/11/enabled = true
|
||||
tracks/11/path = NodePath("SitDownSFX:playing")
|
||||
tracks/11/interp = 1
|
||||
tracks/11/loop_wrap = true
|
||||
tracks/11/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/12/type = "value"
|
||||
tracks/12/imported = false
|
||||
tracks/12/enabled = true
|
||||
tracks/12/path = NodePath(".:playFootsteps")
|
||||
tracks/12/interp = 1
|
||||
tracks/12/loop_wrap = true
|
||||
tracks/12/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_146is"]
|
||||
resource_name = "SitDown"
|
||||
length = 0.1
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("SpriteHolder/LightsOn/MorganAnimation:visible")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("SpriteHolder/LightsOn/MorganSit:visible")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [true]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("SitDownSFX:playing")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [true]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_5uc84"]
|
||||
resource_name = "WalkAway"
|
||||
length = 2.0
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("SpriteHolder/LightsOn/MorganMirror:visible")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("SpriteHolder/LightsOn/MorganAnimation:visible")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [true]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("SpriteHolder/LightsOn/MorganAnimation:position")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0, 1.7),
|
||||
"transitions": PackedFloat32Array(0.7, 1),
|
||||
"update": 0,
|
||||
"values": [Vector2(0, 33), Vector2(186, 33)]
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("SpriteHolder/LightsOn/MorganAnimation:animation")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"times": PackedFloat32Array(0, 1.7),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 1,
|
||||
"values": [&"Walking", &"StandRight"]
|
||||
}
|
||||
tracks/4/type = "value"
|
||||
tracks/4/imported = false
|
||||
tracks/4/enabled = true
|
||||
tracks/4/path = NodePath("SpriteHolder/LightsOn/Reflection:visible")
|
||||
tracks/4/interp = 1
|
||||
tracks/4/loop_wrap = true
|
||||
tracks/4/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/5/type = "value"
|
||||
tracks/5/imported = false
|
||||
tracks/5/enabled = true
|
||||
tracks/5/path = NodePath(".:playFootsteps")
|
||||
tracks/5/interp = 1
|
||||
tracks/5/loop_wrap = true
|
||||
tracks/5/keys = {
|
||||
"times": PackedFloat32Array(0, 1.7),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 1,
|
||||
"values": [true, false]
|
||||
}
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_jj8lm"]
|
||||
_data = {
|
||||
&"FadeOutAmbience": SubResource("Animation_3sgw7"),
|
||||
&"FadeToDark": SubResource("Animation_oiuit"),
|
||||
&"LookLeft": SubResource("Animation_1pvd7"),
|
||||
&"RESET": SubResource("Animation_2e1y4"),
|
||||
&"SitDown": SubResource("Animation_146is"),
|
||||
&"WalkAway": SubResource("Animation_5uc84")
|
||||
}
|
||||
|
||||
[node name="Bathroom1Scene" type="Control" groups=["cutscene"]]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1_aj5dx")
|
||||
nextScene_ = ExtResource("2_0bej6")
|
||||
|
||||
[node name="ColorRect" type="ColorRect" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
color = Color(0, 0, 0, 1)
|
||||
|
||||
[node name="SpriteHolder" type="Node2D" parent="."]
|
||||
position = Vector2(960, 540)
|
||||
|
||||
[node name="LightsOn" type="Node2D" parent="SpriteHolder"]
|
||||
|
||||
[node name="Background" type="Sprite2D" parent="SpriteHolder/LightsOn"]
|
||||
texture = ExtResource("2_6cvv6")
|
||||
|
||||
[node name="Reflection" type="Sprite2D" parent="SpriteHolder/LightsOn"]
|
||||
texture = ExtResource("3_8l70x")
|
||||
|
||||
[node name="MorganMirror" type="Sprite2D" parent="SpriteHolder/LightsOn"]
|
||||
texture = ExtResource("4_s4kiy")
|
||||
|
||||
[node name="MorganAnimation" type="AnimatedSprite2D" parent="SpriteHolder/LightsOn"]
|
||||
visible = false
|
||||
position = Vector2(0, 33)
|
||||
sprite_frames = SubResource("SpriteFrames_3ajjw")
|
||||
animation = &"Walking"
|
||||
autoplay = "Walking"
|
||||
|
||||
[node name="SoundsContainer" type="Node2D" parent="SpriteHolder/LightsOn/MorganAnimation"]
|
||||
|
||||
[node name="StepSFX1" type="AudioStreamPlayer2D" parent="SpriteHolder/LightsOn/MorganAnimation/SoundsContainer"]
|
||||
stream = ExtResource("12_q6oqr")
|
||||
|
||||
[node name="StepSFX2" type="AudioStreamPlayer2D" parent="SpriteHolder/LightsOn/MorganAnimation/SoundsContainer"]
|
||||
stream = ExtResource("13_bbads")
|
||||
|
||||
[node name="StepSFX3" type="AudioStreamPlayer2D" parent="SpriteHolder/LightsOn/MorganAnimation/SoundsContainer"]
|
||||
stream = ExtResource("14_l3edt")
|
||||
|
||||
[node name="StepSFX4" type="AudioStreamPlayer2D" parent="SpriteHolder/LightsOn/MorganAnimation/SoundsContainer"]
|
||||
stream = ExtResource("15_b8aj3")
|
||||
|
||||
[node name="StepSFX5" type="AudioStreamPlayer2D" parent="SpriteHolder/LightsOn/MorganAnimation/SoundsContainer"]
|
||||
stream = ExtResource("16_q43hq")
|
||||
|
||||
[node name="StepSFX6" type="AudioStreamPlayer2D" parent="SpriteHolder/LightsOn/MorganAnimation/SoundsContainer"]
|
||||
stream = ExtResource("17_blv4t")
|
||||
|
||||
[node name="MorganSit" type="Sprite2D" parent="SpriteHolder/LightsOn"]
|
||||
visible = false
|
||||
texture = ExtResource("12_o0nao")
|
||||
|
||||
[node name="LightsOff" type="Node2D" parent="SpriteHolder"]
|
||||
visible = false
|
||||
|
||||
[node name="Background" type="Sprite2D" parent="SpriteHolder/LightsOff"]
|
||||
light_mask = 0
|
||||
texture = ExtResource("13_08ibi")
|
||||
|
||||
[node name="MSitAnimation" type="AnimatedSprite2D" parent="SpriteHolder/LightsOff"]
|
||||
sprite_frames = SubResource("SpriteFrames_xegdv")
|
||||
animation = &"LookDown"
|
||||
autoplay = "LookDown"
|
||||
|
||||
[node name="DarkOverlay" type="PointLight2D" parent="SpriteHolder/LightsOff"]
|
||||
blend_mode = 2
|
||||
texture = ExtResource("15_02pye")
|
||||
|
||||
[node name="BlackOverlay" type="ColorRect" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
color = Color(0, 0, 0, 0)
|
||||
|
||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
||||
libraries = {
|
||||
&"": SubResource("AnimationLibrary_jj8lm")
|
||||
}
|
||||
|
||||
[node name="DarkAmbience" type="AudioStreamPlayer" parent="."]
|
||||
stream = ExtResource("16_a3ovf")
|
||||
volume_db = -80.0
|
||||
autoplay = true
|
||||
|
||||
[node name="SitDownSFX" type="AudioStreamPlayer" parent="."]
|
||||
stream = ExtResource("23_bbads")
|
||||
|
||||
[connection signal="frame_changed" from="SpriteHolder/LightsOn/MorganAnimation" to="." method="_on_morgan_animation_frame_changed"]
|
||||
@@ -0,0 +1,50 @@
|
||||
extends Control
|
||||
|
||||
@onready var bathroom_bg: Sprite2D = $SpriteHolder/BathroomBG
|
||||
@onready var livingroom_bg: Sprite2D = $SpriteHolder/LivingroomBG
|
||||
@onready var animation_player: AnimationPlayer = $AnimationPlayer
|
||||
@onready var morgan_solo_animation: AnimatedSprite2D = $SpriteHolder/LivingroomBG/MorganSoloAnimation
|
||||
@onready var sounds_container: Node2D = $SpriteHolder/LivingroomBG/MorganSoloAnimation/SoundsContainer
|
||||
|
||||
##Delay to add to the scene before automatically starting the animation
|
||||
@export var startDelay := 4.0
|
||||
##Delay to add at the end of the animation before fading to black
|
||||
@export var endDelay := 1.0
|
||||
##Next scene to load once animation finishes
|
||||
@export var nextScene_ : PackedScene
|
||||
|
||||
##Tracks when the footstep sfx should be played. Controlled by AnimationPlayer.
|
||||
##Must be exported var so AnimationPlayer can modify it.
|
||||
@export var playFootsteps := false
|
||||
|
||||
var dialog_bathroom = "demo_bathroom_2"
|
||||
|
||||
func _ready() -> void:
|
||||
await get_tree().create_timer(startDelay).timeout
|
||||
DialogManager.start_cutscene_dialog(dialog_bathroom)
|
||||
|
||||
func _on_dialog_ended() -> void:
|
||||
print("Dialog end!")
|
||||
await get_tree().create_timer(1.0).timeout
|
||||
await SceneManager.fade_animation_setup(0.5, 0.0)
|
||||
TeaserMusicManager.stopMusic()
|
||||
await SceneManager.play_animation("fadeToBlack")
|
||||
bathroom_bg.visible = false
|
||||
livingroom_bg.visible = true
|
||||
|
||||
animation_player.play("FadeInApartmentAmbience")
|
||||
await get_tree().create_timer(1.0).timeout
|
||||
await SceneManager.play_animation("fadeFromBlack")
|
||||
animation_player.play("HandHolding")
|
||||
|
||||
func _on_animation_player_animation_finished(anim_name: StringName) -> void:
|
||||
if anim_name == "HandHolding":
|
||||
await get_tree().create_timer(endDelay).timeout
|
||||
SceneManager.load_raw_packedScene(nextScene_, true, 0.25, 0.5, 0.25, 2.0)
|
||||
|
||||
|
||||
func _on_morgan_solo_animation_frame_changed() -> void:
|
||||
if playFootsteps:
|
||||
if morgan_solo_animation.get_frame() == 1 or morgan_solo_animation.get_frame() == 3:
|
||||
var chosenStepSFX : AudioStreamPlayer2D = sounds_container.get_children()[randi() % sounds_container.get_children().size()]
|
||||
chosenStepSFX.play()
|
||||
@@ -0,0 +1 @@
|
||||
uid://jfg0oyxbvp4h
|
||||
@@ -0,0 +1,488 @@
|
||||
[gd_scene load_steps=33 format=3 uid="uid://clo30u8t1v2s5"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://jfg0oyxbvp4h" path="res://Cutscenes/bathroom_2_scene.gd" id="1_4vnsk"]
|
||||
[ext_resource type="Texture2D" uid="uid://dn42ud5ylkege" path="res://assets/animations/Morgan Bathroom Scene Demo/bathroom bg.png" id="1_k8kjh"]
|
||||
[ext_resource type="PackedScene" uid="uid://k7o5gfolp0fh" path="res://Cutscenes/morgan_unwrapping_scene.tscn" id="2_qkmmt"]
|
||||
[ext_resource type="Texture2D" uid="uid://e3xa818i1kq2" path="res://assets/animations/Morgan Bathroom Scene Demo/morgan reflection 3.png" id="2_uopkw"]
|
||||
[ext_resource type="Texture2D" uid="uid://csikf2cqybaex" path="res://assets/animations/Morgan Bathroom Scene Demo/morgan bathroom 3b.png" id="3_5o7n7"]
|
||||
[ext_resource type="Texture2D" uid="uid://twfgsn6v7hup" path="res://assets/animations/Farelie Couch Scene Demo/morgans apt.png" id="5_sc7sv"]
|
||||
[ext_resource type="Texture2D" uid="uid://iym78ygrsmp6" path="res://assets/animations/Morgan Bathroom Scene Demo/morgan gloves overlay.png" id="6_h3eam"]
|
||||
[ext_resource type="Texture2D" uid="uid://drfdkcrradqtt" path="res://assets/animations/Farelie Couch Scene Demo/morgans apt tv.png" id="6_itdq8"]
|
||||
[ext_resource type="Texture2D" uid="uid://bfas4wo3ouuun" path="res://assets/animations/Apartment Scene Demo/farelie_neutral_sprite.png" id="8_rce7p"]
|
||||
[ext_resource type="Texture2D" uid="uid://c1m3q8p5s3k0" path="res://assets/animations/Farelie Couch Scene Demo/bmorgan handhold b.png" id="9_5j1il"]
|
||||
[ext_resource type="Texture2D" uid="uid://bju1lqi4aa12w" path="res://assets/animations/Farelie Couch Scene Demo/bmorg_neutral_no_gloves.png" id="9_vmy74"]
|
||||
[ext_resource type="Texture2D" uid="uid://blsq4jn6r8oui" path="res://assets/animations/Farelie Couch Scene Demo/bmorgan handhold a.png" id="10_ew8sb"]
|
||||
[ext_resource type="Texture2D" uid="uid://bhbgxr1qg4rca" path="res://assets/animations/Farelie Couch Scene Demo/BandageMorganWalk/bmorgan no gloves walk left 1.png" id="10_nax1x"]
|
||||
[ext_resource type="Texture2D" uid="uid://dxdfwun6xnvmm" path="res://assets/animations/Farelie Couch Scene Demo/BandageMorganWalk/bmorgan no gloves walk left 2.png" id="11_5j751"]
|
||||
[ext_resource type="Texture2D" uid="uid://cx5gfktkpnq1k" path="res://assets/animations/Farelie Couch Scene Demo/BandageMorganWalk/bmorgan no gloves walk left 3.png" id="12_iv08v"]
|
||||
[ext_resource type="Texture2D" uid="uid://dyylfr48fpf66" path="res://assets/animations/Farelie Couch Scene Demo/BandageMorganWalk/bmorgan no gloves walk left 4.png" id="13_hacko"]
|
||||
[ext_resource type="Texture2D" uid="uid://c07bxch3c57x8" path="res://assets/animations/Farelie Couch Scene Demo/multiply b.png" id="14_ufx3p"]
|
||||
[ext_resource type="AudioStream" uid="uid://c1ubo3ehnbq4u" path="res://assets/audio/Teaser/footsteps/carpet/1.ogg" id="15_4mw4q"]
|
||||
[ext_resource type="AudioStream" uid="uid://gqqkuyrpspjs" path="res://assets/audio/Teaser/footsteps/carpet/2.ogg" id="16_x5c80"]
|
||||
[ext_resource type="AudioStream" uid="uid://by0v4dbdjcuv4" path="res://assets/audio/Teaser/footsteps/carpet/3.ogg" id="17_ixuwr"]
|
||||
[ext_resource type="AudioStream" uid="uid://b61xys0vhhlv4" path="res://assets/audio/Teaser/footsteps/carpet/4.ogg" id="18_mva2f"]
|
||||
[ext_resource type="AudioStream" uid="uid://bglirrx16sho8" path="res://assets/audio/Teaser/footsteps/carpet/5.ogg" id="19_6ucik"]
|
||||
[ext_resource type="AudioStream" uid="uid://blhws6e67v6dh" path="res://assets/audio/Teaser/footsteps/carpet/6.ogg" id="20_d8fiy"]
|
||||
[ext_resource type="AudioStream" uid="uid://ddsubbbp6tuag" path="res://assets/audio/Teaser/ambience/apartment_inside.ogg" id="24_dkx5h"]
|
||||
|
||||
[sub_resource type="SpriteFrames" id="SpriteFrames_vkqfp"]
|
||||
animations = [{
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("9_vmy74")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"Standing",
|
||||
"speed": 5.0
|
||||
}, {
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("10_nax1x")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("11_5j751")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("12_iv08v")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("13_hacko")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"Walking",
|
||||
"speed": 5.0
|
||||
}]
|
||||
|
||||
[sub_resource type="SpriteFrames" id="SpriteFrames_usxri"]
|
||||
animations = [{
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("9_5j1il")
|
||||
}],
|
||||
"loop": false,
|
||||
"name": &"LookAtFace",
|
||||
"speed": 5.0
|
||||
}, {
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("10_ew8sb")
|
||||
}],
|
||||
"loop": false,
|
||||
"name": &"LookAtHands",
|
||||
"speed": 5.0
|
||||
}]
|
||||
|
||||
[sub_resource type="Animation" id="Animation_vxtxq"]
|
||||
resource_name = "GlovesOff"
|
||||
length = 0.6
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("SpriteHolder/BathroomBG/GlovesOverlay:modulate")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 0.6),
|
||||
"transitions": PackedFloat32Array(0.75, 1),
|
||||
"update": 0,
|
||||
"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_tf8s4"]
|
||||
resource_name = "HandHolding"
|
||||
length = 8.0
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("SpriteHolder/LivingroomBG/MorganSoloAnimation:animation")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 4),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 1,
|
||||
"values": [&"Walking", &"Standing"]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("SpriteHolder/LivingroomBG/MorganSoloAnimation:position")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0, 1, 4),
|
||||
"transitions": PackedFloat32Array(1, 0.7, 1),
|
||||
"update": 0,
|
||||
"values": [Vector2(1123, 95), Vector2(1123, 95), Vector2(325, 95)]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("SpriteHolder/LivingroomBG/MorganSoloAnimation:visible")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0, 5),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 1,
|
||||
"values": [true, false]
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("SpriteHolder/LivingroomBG/FarelieSoloSprite:flip_h")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"times": PackedFloat32Array(0, 1),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 1,
|
||||
"values": [true, false]
|
||||
}
|
||||
tracks/4/type = "value"
|
||||
tracks/4/imported = false
|
||||
tracks/4/enabled = true
|
||||
tracks/4/path = NodePath("SpriteHolder/LivingroomBG/FarelieSoloSprite:visible")
|
||||
tracks/4/interp = 1
|
||||
tracks/4/loop_wrap = true
|
||||
tracks/4/keys = {
|
||||
"times": PackedFloat32Array(0, 5),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 1,
|
||||
"values": [true, false]
|
||||
}
|
||||
tracks/5/type = "value"
|
||||
tracks/5/imported = false
|
||||
tracks/5/enabled = true
|
||||
tracks/5/path = NodePath("SpriteHolder/LivingroomBG/HandHoldAnimation:visible")
|
||||
tracks/5/interp = 1
|
||||
tracks/5/loop_wrap = true
|
||||
tracks/5/keys = {
|
||||
"times": PackedFloat32Array(0, 5),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 1,
|
||||
"values": [false, true]
|
||||
}
|
||||
tracks/6/type = "value"
|
||||
tracks/6/imported = false
|
||||
tracks/6/enabled = true
|
||||
tracks/6/path = NodePath("SpriteHolder/LivingroomBG/HandHoldAnimation:animation")
|
||||
tracks/6/interp = 1
|
||||
tracks/6/loop_wrap = true
|
||||
tracks/6/keys = {
|
||||
"times": PackedFloat32Array(0, 7),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 1,
|
||||
"values": [&"LookAtHands", &"LookAtFace"]
|
||||
}
|
||||
tracks/7/type = "value"
|
||||
tracks/7/imported = false
|
||||
tracks/7/enabled = true
|
||||
tracks/7/path = NodePath(".:playFootsteps")
|
||||
tracks/7/interp = 1
|
||||
tracks/7/loop_wrap = true
|
||||
tracks/7/keys = {
|
||||
"times": PackedFloat32Array(0, 1, 4),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 1,
|
||||
"values": [false, true, false]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_2ce3k"]
|
||||
length = 0.001
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("SpriteHolder/LivingroomBG/MorganSoloAnimation:animation")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [&"Walking"]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("SpriteHolder/LivingroomBG/MorganSoloAnimation:position")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector2(1123, 95)]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("SpriteHolder/LivingroomBG/MorganSoloAnimation:visible")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [true]
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("SpriteHolder/LivingroomBG/FarelieSoloSprite:flip_h")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [true]
|
||||
}
|
||||
tracks/4/type = "value"
|
||||
tracks/4/imported = false
|
||||
tracks/4/enabled = true
|
||||
tracks/4/path = NodePath("SpriteHolder/LivingroomBG/FarelieSoloSprite:visible")
|
||||
tracks/4/interp = 1
|
||||
tracks/4/loop_wrap = true
|
||||
tracks/4/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [true]
|
||||
}
|
||||
tracks/5/type = "value"
|
||||
tracks/5/imported = false
|
||||
tracks/5/enabled = true
|
||||
tracks/5/path = NodePath("SpriteHolder/LivingroomBG/HandHoldAnimation:visible")
|
||||
tracks/5/interp = 1
|
||||
tracks/5/loop_wrap = true
|
||||
tracks/5/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/6/type = "value"
|
||||
tracks/6/imported = false
|
||||
tracks/6/enabled = true
|
||||
tracks/6/path = NodePath("SpriteHolder/LivingroomBG/HandHoldAnimation:animation")
|
||||
tracks/6/interp = 1
|
||||
tracks/6/loop_wrap = true
|
||||
tracks/6/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [&"LookAtHands"]
|
||||
}
|
||||
tracks/7/type = "value"
|
||||
tracks/7/imported = false
|
||||
tracks/7/enabled = true
|
||||
tracks/7/path = NodePath("SpriteHolder/BathroomBG/Morgan:modulate")
|
||||
tracks/7/interp = 1
|
||||
tracks/7/loop_wrap = true
|
||||
tracks/7/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Color(1, 1, 1, 1)]
|
||||
}
|
||||
tracks/8/type = "value"
|
||||
tracks/8/imported = false
|
||||
tracks/8/enabled = true
|
||||
tracks/8/path = NodePath("SpriteHolder/BathroomBG/GlovesOverlay:modulate")
|
||||
tracks/8/interp = 1
|
||||
tracks/8/loop_wrap = true
|
||||
tracks/8/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Color(1, 1, 1, 1)]
|
||||
}
|
||||
tracks/9/type = "value"
|
||||
tracks/9/imported = false
|
||||
tracks/9/enabled = true
|
||||
tracks/9/path = NodePath(".:playFootsteps")
|
||||
tracks/9/interp = 1
|
||||
tracks/9/loop_wrap = true
|
||||
tracks/9/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/10/type = "value"
|
||||
tracks/10/imported = false
|
||||
tracks/10/enabled = true
|
||||
tracks/10/path = NodePath("ApartmentAmbience:volume_db")
|
||||
tracks/10/interp = 1
|
||||
tracks/10/loop_wrap = true
|
||||
tracks/10/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [0.0]
|
||||
}
|
||||
tracks/11/type = "value"
|
||||
tracks/11/imported = false
|
||||
tracks/11/enabled = true
|
||||
tracks/11/path = NodePath("ApartmentAmbience:playing")
|
||||
tracks/11/interp = 1
|
||||
tracks/11/loop_wrap = true
|
||||
tracks/11/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_dkx5h"]
|
||||
resource_name = "FadeInApartmentAmbience"
|
||||
length = 1.5
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("ApartmentAmbience:volume_db")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 1.5),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [-63.135, -5.622]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("ApartmentAmbience:playing")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [true]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_auw6u"]
|
||||
resource_name = "FadeOutApartmentAmbience"
|
||||
length = 3.0
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("ApartmentAmbience:volume_db")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 3),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [-5.622, -63.135]
|
||||
}
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_mtybj"]
|
||||
_data = {
|
||||
&"FadeInApartmentAmbience": SubResource("Animation_dkx5h"),
|
||||
&"FadeOutApartmentAmbience": SubResource("Animation_auw6u"),
|
||||
&"GlovesOff": SubResource("Animation_vxtxq"),
|
||||
&"HandHolding": SubResource("Animation_tf8s4"),
|
||||
&"RESET": SubResource("Animation_2ce3k")
|
||||
}
|
||||
|
||||
[node name="Bathroom2Scene" type="Control" groups=["cutscene"]]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1_4vnsk")
|
||||
nextScene_ = ExtResource("2_qkmmt")
|
||||
|
||||
[node name="ColorRect" type="ColorRect" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
color = Color(0, 0, 0, 1)
|
||||
|
||||
[node name="SpriteHolder" type="Node2D" parent="."]
|
||||
position = Vector2(960, 540)
|
||||
|
||||
[node name="BathroomBG" type="Sprite2D" parent="SpriteHolder"]
|
||||
texture = ExtResource("1_k8kjh")
|
||||
|
||||
[node name="MirrorSprite" type="Sprite2D" parent="SpriteHolder/BathroomBG"]
|
||||
texture = ExtResource("2_uopkw")
|
||||
|
||||
[node name="Morgan" type="Sprite2D" parent="SpriteHolder/BathroomBG"]
|
||||
texture = ExtResource("3_5o7n7")
|
||||
|
||||
[node name="GlovesOverlay" type="Sprite2D" parent="SpriteHolder/BathroomBG"]
|
||||
texture = ExtResource("6_h3eam")
|
||||
|
||||
[node name="LivingroomBG" type="Sprite2D" parent="SpriteHolder"]
|
||||
visible = false
|
||||
clip_children = 2
|
||||
light_mask = 0
|
||||
texture = ExtResource("5_sc7sv")
|
||||
|
||||
[node name="TVSprite" type="Sprite2D" parent="SpriteHolder/LivingroomBG"]
|
||||
light_mask = 0
|
||||
texture = ExtResource("6_itdq8")
|
||||
|
||||
[node name="FarelieSoloSprite" type="Sprite2D" parent="SpriteHolder/LivingroomBG"]
|
||||
position = Vector2(235, 93)
|
||||
texture = ExtResource("8_rce7p")
|
||||
flip_h = true
|
||||
|
||||
[node name="MorganSoloAnimation" type="AnimatedSprite2D" parent="SpriteHolder/LivingroomBG"]
|
||||
position = Vector2(1123, 95)
|
||||
sprite_frames = SubResource("SpriteFrames_vkqfp")
|
||||
animation = &"Walking"
|
||||
autoplay = "Walking"
|
||||
flip_h = true
|
||||
|
||||
[node name="SoundsContainer" type="Node2D" parent="SpriteHolder/LivingroomBG/MorganSoloAnimation"]
|
||||
|
||||
[node name="StepSFX1" type="AudioStreamPlayer2D" parent="SpriteHolder/LivingroomBG/MorganSoloAnimation/SoundsContainer"]
|
||||
stream = ExtResource("15_4mw4q")
|
||||
|
||||
[node name="StepSFX2" type="AudioStreamPlayer2D" parent="SpriteHolder/LivingroomBG/MorganSoloAnimation/SoundsContainer"]
|
||||
stream = ExtResource("16_x5c80")
|
||||
|
||||
[node name="StepSFX3" type="AudioStreamPlayer2D" parent="SpriteHolder/LivingroomBG/MorganSoloAnimation/SoundsContainer"]
|
||||
stream = ExtResource("17_ixuwr")
|
||||
|
||||
[node name="StepSFX4" type="AudioStreamPlayer2D" parent="SpriteHolder/LivingroomBG/MorganSoloAnimation/SoundsContainer"]
|
||||
stream = ExtResource("18_mva2f")
|
||||
|
||||
[node name="StepSFX5" type="AudioStreamPlayer2D" parent="SpriteHolder/LivingroomBG/MorganSoloAnimation/SoundsContainer"]
|
||||
stream = ExtResource("19_6ucik")
|
||||
|
||||
[node name="StepSFX6" type="AudioStreamPlayer2D" parent="SpriteHolder/LivingroomBG/MorganSoloAnimation/SoundsContainer"]
|
||||
stream = ExtResource("20_d8fiy")
|
||||
|
||||
[node name="SolosOverlay" type="PointLight2D" parent="SpriteHolder/LivingroomBG"]
|
||||
blend_mode = 2
|
||||
texture = ExtResource("14_ufx3p")
|
||||
|
||||
[node name="HandHoldAnimation" type="AnimatedSprite2D" parent="SpriteHolder/LivingroomBG"]
|
||||
visible = false
|
||||
light_mask = 0
|
||||
position = Vector2(0, -1)
|
||||
sprite_frames = SubResource("SpriteFrames_usxri")
|
||||
animation = &"LookAtHands"
|
||||
autoplay = "LookAtHands"
|
||||
|
||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
||||
libraries = {
|
||||
&"": SubResource("AnimationLibrary_mtybj")
|
||||
}
|
||||
|
||||
[node name="ApartmentAmbience" type="AudioStreamPlayer" parent="."]
|
||||
stream = ExtResource("24_dkx5h")
|
||||
|
||||
[connection signal="frame_changed" from="SpriteHolder/LivingroomBG/MorganSoloAnimation" to="." method="_on_morgan_solo_animation_frame_changed"]
|
||||
[connection signal="animation_finished" from="AnimationPlayer" to="." method="_on_animation_player_animation_finished"]
|
||||
@@ -0,0 +1,55 @@
|
||||
extends Control
|
||||
|
||||
@onready var video_stream_player: VideoStreamPlayer = $VideoStreamPlayer
|
||||
@onready var pause_menu_container: CenterContainer = $PauseMenuContainer
|
||||
@onready var no_button: Button = $PauseMenuContainer/VBoxContainer/ButtonsHolder/NoButton
|
||||
|
||||
##Delay to add to the scene before automatically starting the animation
|
||||
@export var startDelay := 2.0
|
||||
##Delay to add at the end of the animation before fading to black
|
||||
@export var endDelay := 2.0
|
||||
##Next scene to load once animation finishes
|
||||
@export var nextScene_ : PackedScene
|
||||
|
||||
#Custom variable to track if the video is playing or not
|
||||
#For some reason VideoStreamPlayer's "is_paused()" function STILL RETURNS TRUE IF THE STREAM IS PAUSED
|
||||
var isPlaying := true
|
||||
|
||||
func _ready() -> void:
|
||||
#Hide the mouse when the scene loads (captured sets it to the middle of the screen AND hides it)
|
||||
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
|
||||
await get_tree().create_timer(startDelay).timeout
|
||||
video_stream_player.play()
|
||||
|
||||
func _process(_delta: float) -> void:
|
||||
if Input.is_action_just_pressed("escape_key"):
|
||||
#Video is playing so we want to open pause menu
|
||||
if isPlaying:
|
||||
isPlaying = false
|
||||
pause_menu_container.visible = true
|
||||
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
|
||||
video_stream_player.set_paused(true)
|
||||
#Video was already paused so close the menu and resume playback
|
||||
else:
|
||||
isPlaying = true
|
||||
pause_menu_container.visible = false
|
||||
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
|
||||
video_stream_player.set_paused(false)
|
||||
|
||||
func _on_video_stream_player_finished() -> void:
|
||||
print("Video end!")
|
||||
await get_tree().create_timer(endDelay).timeout
|
||||
SceneManager.load_raw_packedScene(nextScene_, true, 0.3, 0.3, 0.3, 4.5)
|
||||
|
||||
#Skipping cutscene
|
||||
func _on_yes_button_pressed() -> void:
|
||||
print("Skipped cutscene!")
|
||||
pause_menu_container.visible = false
|
||||
await get_tree().create_timer(0.5).timeout
|
||||
SceneManager.load_raw_packedScene(nextScene_, true, 0.3, 0.3, 0.3, 4.5)
|
||||
|
||||
func _on_no_button_pressed() -> void:
|
||||
isPlaying = true
|
||||
pause_menu_container.visible = false
|
||||
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
|
||||
video_stream_player.set_paused(false)
|
||||
@@ -0,0 +1 @@
|
||||
uid://d2ei3f1vx4erq
|
||||
@@ -0,0 +1,119 @@
|
||||
[gd_scene load_steps=10 format=3 uid="uid://vaeaucrytuf2"]
|
||||
|
||||
[ext_resource type="VideoStream" uid="uid://dn72o7lfvfdcx" path="res://assets/videos/TeaserCutscene.ogv" id="1_6xp7g"]
|
||||
[ext_resource type="Script" uid="uid://d2ei3f1vx4erq" path="res://Cutscenes/dream_intro_scene.gd" id="1_7yvrv"]
|
||||
[ext_resource type="PackedScene" uid="uid://g3x1qbgfttxc" path="res://Cutscenes/hospital_scene.tscn" id="2_q4nex"]
|
||||
[ext_resource type="FontFile" uid="uid://bi4j07xv130kr" path="res://assets/font/FallingSky.otf" id="3_hp4c6"]
|
||||
[ext_resource type="Script" uid="uid://lvbn3v5uehho" path="res://addons/frog_subtitles/nodes/VideoStreamSubtitles.gd" id="3_uvbp4"]
|
||||
[ext_resource type="Resource" uid="uid://jepqa0mh8ic6" path="res://locale/subtitles/cutscene_en.srt" id="4_1w833"]
|
||||
[ext_resource type="FontFile" uid="uid://c0twh2clljvgd" path="res://assets/font/Bounded-Black.ttf" id="4_30oa6"]
|
||||
[ext_resource type="Theme" uid="uid://ciqa04gah3bh5" path="res://assets/themes/TeaserMenuTheme.tres" id="5_pwk6g"]
|
||||
|
||||
[sub_resource type="Theme" id="Theme_ouxxs"]
|
||||
default_font = ExtResource("3_hp4c6")
|
||||
default_font_size = 75
|
||||
Label/colors/font_outline_color = Color(0, 0, 0, 1)
|
||||
Label/constants/outline_size = 30
|
||||
RichTextLabel/constants/outline_size = 10
|
||||
|
||||
[node name="DreamIntroScene" type="Control" groups=["cutscene"]]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1_7yvrv")
|
||||
nextScene_ = ExtResource("2_q4nex")
|
||||
|
||||
[node name="ColorRect" type="ColorRect" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
color = Color(0, 0, 0, 1)
|
||||
|
||||
[node name="VideoStreamPlayer" type="VideoStreamPlayer" parent="."]
|
||||
layout_mode = 0
|
||||
offset_right = 40.0
|
||||
offset_bottom = 40.0
|
||||
stream = ExtResource("1_6xp7g")
|
||||
|
||||
[node name="PauseMenuContainer" type="CenterContainer" parent="."]
|
||||
visible = false
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="PauseMenuContainer"]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 24
|
||||
|
||||
[node name="Label" type="Label" parent="PauseMenuContainer/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
theme_override_colors/font_outline_color = Color(0, 0, 0, 1)
|
||||
theme_override_constants/outline_size = 8
|
||||
theme_override_fonts/font = ExtResource("4_30oa6")
|
||||
theme_override_font_sizes/font_size = 70
|
||||
text = "SKIP CUTSCENE?"
|
||||
|
||||
[node name="ButtonsHolder" type="HBoxContainer" parent="PauseMenuContainer/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 80
|
||||
alignment = 1
|
||||
|
||||
[node name="YesButton" type="Button" parent="PauseMenuContainer/VBoxContainer/ButtonsHolder"]
|
||||
layout_mode = 2
|
||||
theme = ExtResource("5_pwk6g")
|
||||
theme_type_variation = &"FlatButton"
|
||||
theme_override_colors/font_hover_color = Color(0.482353, 0.509804, 0.305882, 1)
|
||||
theme_override_colors/font_outline_color = Color(0, 0, 0, 1)
|
||||
theme_override_colors/font_color = Color(0.270588, 0.270588, 0.270588, 1)
|
||||
theme_override_colors/font_focus_color = Color(0.482353, 0.509804, 0.305882, 1)
|
||||
theme_override_colors/font_pressed_color = Color(0.482353, 0.509804, 0.305882, 1)
|
||||
theme_override_constants/outline_size = 8
|
||||
theme_override_font_sizes/font_size = 50
|
||||
text = "YES"
|
||||
|
||||
[node name="NoButton" type="Button" parent="PauseMenuContainer/VBoxContainer/ButtonsHolder"]
|
||||
layout_mode = 2
|
||||
theme = ExtResource("5_pwk6g")
|
||||
theme_type_variation = &"FlatButton"
|
||||
theme_override_colors/font_hover_color = Color(0.482353, 0.509804, 0.305882, 1)
|
||||
theme_override_colors/font_outline_color = Color(0, 0, 0, 1)
|
||||
theme_override_colors/font_color = Color(0.270588, 0.270588, 0.270588, 1)
|
||||
theme_override_colors/font_focus_color = Color(0.482353, 0.509804, 0.305882, 1)
|
||||
theme_override_colors/font_pressed_color = Color(0.482353, 0.509804, 0.305882, 1)
|
||||
theme_override_constants/outline_size = 8
|
||||
theme_override_font_sizes/font_size = 50
|
||||
text = "NO"
|
||||
|
||||
[node name="VideoStreamSubtitles" type="RichTextLabel" parent="." node_paths=PackedStringArray("player")]
|
||||
layout_mode = 1
|
||||
anchors_preset = 7
|
||||
anchor_left = 0.5
|
||||
anchor_top = 1.0
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 1.0
|
||||
offset_left = -803.0
|
||||
offset_top = -217.0
|
||||
offset_right = 803.0
|
||||
offset_bottom = -15.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 0
|
||||
theme = SubResource("Theme_ouxxs")
|
||||
bbcode_enabled = true
|
||||
text = "[fade start={1} length=4][center]{0}[/center][/fade]"
|
||||
scroll_active = false
|
||||
script = ExtResource("3_uvbp4")
|
||||
player = NodePath("../VideoStreamPlayer")
|
||||
subtitles = ExtResource("4_1w833")
|
||||
|
||||
[connection signal="finished" from="VideoStreamPlayer" to="." method="_on_video_stream_player_finished"]
|
||||
[connection signal="pressed" from="PauseMenuContainer/VBoxContainer/ButtonsHolder/YesButton" to="." method="_on_yes_button_pressed"]
|
||||
[connection signal="pressed" from="PauseMenuContainer/VBoxContainer/ButtonsHolder/NoButton" to="." method="_on_no_button_pressed"]
|
||||
@@ -0,0 +1,190 @@
|
||||
extends Control
|
||||
|
||||
@onready var animation_player: AnimationPlayer = $AnimationPlayer
|
||||
@onready var morgan_controller: AnimatedSprite2D = $SpriteHolder/MorganPlayerController
|
||||
@onready var livingroom_bg: Sprite2D = $SpriteHolder/LivingroomBG
|
||||
@onready var morganbedroom_bg: Sprite2D = $SpriteHolder/MorganbedroomBG
|
||||
@onready var farelie_cheeseburgers_anim: AnimatedSprite2D = $SpriteHolder/LivingroomBG/FarelieCheeseburgersAnim
|
||||
@onready var movement_indicator: Sprite2D = $SpriteHolder/MorganPlayerController/MovementIndicator
|
||||
@onready var indicator_visible_timer: Timer = $SpriteHolder/MorganPlayerController/IndicatorVisibleTimer
|
||||
@onready var sprite_holder: Node2D = $SpriteHolder
|
||||
@onready var livingroom_overlay: PointLight2D = $SpriteHolder/LivingroomBG/LivingroomOverlay
|
||||
@onready var couch_overlay: Sprite2D = $SpriteHolder/LivingroomBG/CouchOverlay
|
||||
@onready var morg_sounds_container: Node2D = $SpriteHolder/MorganPlayerController/SoundsContainer
|
||||
@onready var farelie_sounds_container: Node2D = $SpriteHolder/LivingroomBG/FarelieCheeseburgersAnim/SoundsContainer
|
||||
@onready var bedroom_ambience: AudioStreamPlayer = $BedroomAmbience
|
||||
@onready var apartment_ambience: AudioStreamPlayer = $ApartmentAmbience
|
||||
|
||||
##Delay to add to the scene before automatically starting the animation
|
||||
@export var startDelay := 3.0
|
||||
##Delay to add at the end of the animation before fading to black
|
||||
@export var endDelay := 1.0
|
||||
##Next scene to load once animation finishes
|
||||
@export var nextScene_ : PackedScene
|
||||
|
||||
##Tracks when the footstep sfx should be played. Mainly controlled by AnimationPlayer
|
||||
@export var playFootsteps := false
|
||||
|
||||
var mini_scene_tracker := 0
|
||||
|
||||
#Player controller variables
|
||||
var playerControlEnabled := false
|
||||
var speed := 300
|
||||
var inLivingRoom := true
|
||||
var startedMoving := false
|
||||
|
||||
var dialog_couch = "demo_cheeseburgers_couch"
|
||||
var dialog_bedroom = "demo_cheeseburgers_bedroom"
|
||||
var dialog_farelie_pt1 = "demo_cheeseburgers_farelie_pt1"
|
||||
var dialog_farelie_pt2 = "demo_cheeseburgers_farelie_pt2"
|
||||
|
||||
func _ready() -> void:
|
||||
randomize()
|
||||
await get_tree().create_timer(startDelay).timeout
|
||||
DialogManager.start_cutscene_dialog(dialog_couch)
|
||||
|
||||
func _on_dialog_ended() -> void:
|
||||
print("Dialog end!")
|
||||
if mini_scene_tracker == 0:
|
||||
mini_scene_tracker += 1
|
||||
await get_tree().create_timer(1.0).timeout
|
||||
animation_player.play("MorganControlSetup")
|
||||
elif mini_scene_tracker == 1:
|
||||
mini_scene_tracker += 1
|
||||
await get_tree().create_timer(1.0).timeout
|
||||
transition_to_livingroom()
|
||||
elif mini_scene_tracker == 2:
|
||||
mini_scene_tracker += 1
|
||||
animation_player.play("FarelieReturnWalk")
|
||||
elif mini_scene_tracker == 3:
|
||||
await get_tree().create_timer(endDelay).timeout
|
||||
animation_player.play("FadeOutApartmentAmbience")
|
||||
SceneManager.load_raw_packedScene(nextScene_, true, 0.25, 0.5, 0.25, 2.0)
|
||||
|
||||
|
||||
func _on_animation_player_animation_finished(anim_name: StringName) -> void:
|
||||
if anim_name == "MorganControlSetup":
|
||||
couch_overlay.visible = false
|
||||
playerControlEnabled = true
|
||||
indicator_visible_timer.start()
|
||||
#if anim_name == "FarelieReturnSetup":
|
||||
#DialogManager.start_cutscene_dialog(dialog_farelie_pt1)
|
||||
if anim_name == "FarelieReturnWalk":
|
||||
DialogManager.start_cutscene_dialog(dialog_farelie_pt2)
|
||||
|
||||
#Simple player movement controls
|
||||
func _process(delta: float) -> void:
|
||||
if playerControlEnabled:
|
||||
if inLivingRoom:
|
||||
if Input.is_action_pressed("move_right") and morgan_controller.position.x < 888:
|
||||
startedMoving = true
|
||||
morgan_controller.position.x += speed * delta
|
||||
morgan_controller.scale.x = -1
|
||||
%InteractionIndicator.flip_h = true
|
||||
morgan_controller.play("WalkingRight")
|
||||
elif Input.is_action_pressed("move_left") and morgan_controller.position.x > -888:
|
||||
startedMoving = true
|
||||
morgan_controller.position.x -= speed * delta
|
||||
morgan_controller.scale.x = 1
|
||||
%InteractionIndicator.flip_h = false
|
||||
morgan_controller.play("WalkingLeft")
|
||||
else:
|
||||
if morgan_controller.scale.x == 1:
|
||||
morgan_controller.play("StandingLeft")
|
||||
else:
|
||||
morgan_controller.play("StandingRight")
|
||||
#Trigger transition to bedroom here
|
||||
#if morgan_controller.position.x > 887:
|
||||
#playerControlEnabled = false
|
||||
#transition_to_bedroom()
|
||||
if not inLivingRoom:
|
||||
if Input.is_action_pressed("move_right") and morgan_controller.position.x < 333:
|
||||
morgan_controller.position.x += speed * delta
|
||||
morgan_controller.scale.x = -1
|
||||
%InteractionIndicator.flip_h = true
|
||||
morgan_controller.play("WalkingRight")
|
||||
elif Input.is_action_pressed("move_left") and morgan_controller.position.x > -364:
|
||||
morgan_controller.position.x -= speed * delta
|
||||
morgan_controller.scale.x = 1
|
||||
%InteractionIndicator.flip_h = false
|
||||
morgan_controller.play("WalkingLeft")
|
||||
else:
|
||||
if morgan_controller.scale.x == 1:
|
||||
morgan_controller.play("StandingLeft")
|
||||
else:
|
||||
morgan_controller.play("StandingRight")
|
||||
#Trigger dialog for finding knife here
|
||||
#if morgan_controller.position.x > 325:
|
||||
#playerControlEnabled = false
|
||||
#DialogManager.start_cutscene_dialog(dialog_bedroom)
|
||||
# If the controls are disabled, we never play the walking animation
|
||||
else:
|
||||
if morgan_controller.scale.x == 1:
|
||||
morgan_controller.play("StandingLeft")
|
||||
else:
|
||||
morgan_controller.play("StandingRight")
|
||||
if startedMoving:
|
||||
movement_indicator.visible = false
|
||||
|
||||
#Setup for switching to morgan's bedroom
|
||||
func transition_to_bedroom() -> void:
|
||||
playerControlEnabled = false
|
||||
get_tree().call_group("LivingRoomInteractables", "set_enabled", false)
|
||||
get_tree().call_group("BedroomInteractables", "set_enabled", true)
|
||||
await SceneManager.fade_animation_setup(0.5, 0.0)
|
||||
await SceneManager.play_animation("fadeToBlack")
|
||||
livingroom_bg.visible = false
|
||||
morganbedroom_bg.visible = true
|
||||
livingroom_overlay.enabled = false
|
||||
morgan_controller.position.x = -337
|
||||
morgan_controller.position.y = 33
|
||||
morgan_controller.scale.x = -1
|
||||
inLivingRoom = false
|
||||
animation_player.play("FadeInBedroomAmbience")
|
||||
await SceneManager.play_animation("fadeFromBlack")
|
||||
playerControlEnabled = true
|
||||
|
||||
#Setup for switching back to living room after bedroom scene
|
||||
func transition_to_livingroom() -> void:
|
||||
await SceneManager.fade_animation_setup(0.3, 0.2)
|
||||
await SceneManager.play_animation("fadeToBlack")
|
||||
livingroom_bg.visible = true
|
||||
farelie_cheeseburgers_anim.visible = true
|
||||
morganbedroom_bg.visible = false
|
||||
morgan_controller.visible = false
|
||||
livingroom_overlay.enabled = true
|
||||
#Increasing zoom with farelie's return
|
||||
sprite_holder.scale = Vector2(1.2, 1.2)
|
||||
sprite_holder.position.y = 480
|
||||
animation_player.play("FadeOutBedroomAmbience")
|
||||
await get_tree().create_timer(2.5).timeout
|
||||
await SceneManager.play_animation("fadeFromBlack")
|
||||
#animation_player.play("FarelieReturnSetup")
|
||||
DialogManager.start_cutscene_dialog(dialog_farelie_pt1)
|
||||
|
||||
#This connection is needed so that when the animation_player changes cheeseburger farelie's animation value it will play
|
||||
func _on_farelie_cheeseburgers_anim_animation_changed() -> void:
|
||||
farelie_cheeseburgers_anim.play()
|
||||
|
||||
#Will make the movement indiciator visible when the timer runs out if the player has not moved after 3 seconds
|
||||
func _on_indicator_visible_timer_timeout() -> void:
|
||||
if startedMoving == false:
|
||||
movement_indicator.visible = true
|
||||
|
||||
#Runs when morgan player controller's frame changes
|
||||
func _on_morgan_player_controller_frame_changed() -> void:
|
||||
if morgan_controller.get_animation() == "WalkingLeft" or morgan_controller.get_animation() == "WalkingRight":
|
||||
if morgan_controller.get_frame() == 1 or morgan_controller.get_frame() == 3:
|
||||
var chosenStepSFX : AudioStreamPlayer2D = morg_sounds_container.get_children()[randi() % morg_sounds_container.get_children().size()]
|
||||
chosenStepSFX.play()
|
||||
|
||||
#Runs when farelie walking animation frame changes
|
||||
func _on_farelie_cheeseburgers_anim_frame_changed() -> void:
|
||||
if playFootsteps:
|
||||
if farelie_cheeseburgers_anim.get_frame() == 1 or farelie_cheeseburgers_anim.get_frame() == 3:
|
||||
var chosenStepSFX : AudioStreamPlayer2D = farelie_sounds_container.get_children()[randi() % farelie_sounds_container.get_children().size()]
|
||||
chosenStepSFX.play()
|
||||
|
||||
#Function for animationplayer to call at the end of the FarelieLeave animation to stop music
|
||||
func _on_farelie_leave_stop_music() -> void:
|
||||
TeaserMusicManager.stopMusic()
|
||||
@@ -0,0 +1 @@
|
||||
uid://wl5w2b1v54ux
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,36 @@
|
||||
extends Control
|
||||
|
||||
@onready var animation_player: AnimationPlayer = $AnimationPlayer
|
||||
@onready var morgan_walk_animation: AnimatedSprite2D = $SpriteHolder/MorganWalkAnimation
|
||||
@onready var sounds_container: Node2D = $SpriteHolder/MorganWalkAnimation/SoundsContainer
|
||||
|
||||
##Delay to add to the scene before automatically starting the animation
|
||||
@export var startDelay := 3.0
|
||||
##Delay to add at the end of the animation before fading to black
|
||||
@export var endDelay := 1.0
|
||||
##Next scene to load once animation finishes
|
||||
@export var nextScene_ : PackedScene
|
||||
|
||||
##Tracks when the footstep sfx should be played. Controlled by AnimationPlayer.
|
||||
##Must be exported var so AnimationPlayer can modify it.
|
||||
@export var playFootsteps := false
|
||||
|
||||
func _ready() -> void:
|
||||
randomize()
|
||||
await get_tree().create_timer(1.0).timeout
|
||||
TeaserMusicManager.playMusic(TeaserMusicManager.apartmentMusic)
|
||||
await get_tree().create_timer(startDelay).timeout
|
||||
animation_player.play("cutscene")
|
||||
|
||||
|
||||
func _on_animation_player_animation_finished(_anim_name: StringName) -> void:
|
||||
print("Animation finished!")
|
||||
await get_tree().create_timer(endDelay).timeout
|
||||
SceneManager.load_raw_packedScene(nextScene_, true, 0.25, 0.0, 0.25, 2.0)
|
||||
|
||||
|
||||
func _on_morgan_walk_animation_frame_changed() -> void:
|
||||
if playFootsteps:
|
||||
if morgan_walk_animation.get_frame() == 1 or morgan_walk_animation.get_frame() == 3:
|
||||
var chosenStepSFX : AudioStreamPlayer2D = sounds_container.get_children()[randi() % sounds_container.get_children().size()]
|
||||
chosenStepSFX.play()
|
||||
@@ -0,0 +1 @@
|
||||
uid://dwfe5s7xvlqb0
|
||||
@@ -0,0 +1,369 @@
|
||||
[gd_scene load_steps=28 format=3 uid="uid://bjmgut8pfywp5"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://twfgsn6v7hup" path="res://assets/animations/Farelie Couch Scene Demo/morgans apt.png" id="1_4f7kp"]
|
||||
[ext_resource type="Script" uid="uid://dwfe5s7xvlqb0" path="res://Cutscenes/farelie_couch_scene.gd" id="1_6w6vj"]
|
||||
[ext_resource type="Texture2D" uid="uid://drfdkcrradqtt" path="res://assets/animations/Farelie Couch Scene Demo/morgans apt tv.png" id="2_1f4gm"]
|
||||
[ext_resource type="PackedScene" uid="uid://cp3q5dj8v5bhy" path="res://Cutscenes/morgan_haircut_scene.tscn" id="2_i1ike"]
|
||||
[ext_resource type="Texture2D" uid="uid://b0i0sytwbnriy" path="res://assets/animations/Farelie Couch Scene Demo/farelie jammie sit a.png" id="3_7jslv"]
|
||||
[ext_resource type="Texture2D" uid="uid://bhslfejggio1a" path="res://assets/animations/Farelie Couch Scene Demo/farelie jammie sit b.png" id="4_gwf4p"]
|
||||
[ext_resource type="Texture2D" uid="uid://curr3vn54fbnh" path="res://assets/animations/Farelie Couch Scene Demo/farelie jammie sit c.png" id="5_qqy5f"]
|
||||
[ext_resource type="Texture2D" uid="uid://cvjs3wny6bjn7" path="res://assets/animations/Farelie Couch Scene Demo/couch_overlay.png" id="9_vusfd"]
|
||||
[ext_resource type="Texture2D" uid="uid://bhusg83pgk8vk" path="res://assets/animations/Farelie Couch Scene Demo/BandageMorganWalk/bandage morgan walk left 1.png" id="10_rwpm7"]
|
||||
[ext_resource type="Texture2D" uid="uid://cfdqprgeqnkxm" path="res://assets/animations/Farelie Couch Scene Demo/BandageMorganWalk/bandage morgan walk left 2.png" id="11_37lt8"]
|
||||
[ext_resource type="Texture2D" uid="uid://cdkmwgpgx6n8" path="res://assets/animations/Farelie Couch Scene Demo/BandageMorganWalk/bandage morgan walk left 3.png" id="12_7cm0n"]
|
||||
[ext_resource type="Texture2D" uid="uid://hmq11sy3ueld" path="res://assets/animations/Farelie Couch Scene Demo/BandageMorganWalk/bandage morgan walk left 4.png" id="13_bpkt6"]
|
||||
[ext_resource type="Texture2D" uid="uid://c07bxch3c57x8" path="res://assets/animations/Farelie Couch Scene Demo/multiply b.png" id="13_pk8hn"]
|
||||
[ext_resource type="AudioStream" uid="uid://c1ubo3ehnbq4u" path="res://assets/audio/Teaser/footsteps/carpet/1.ogg" id="14_2w3io"]
|
||||
[ext_resource type="Texture2D" uid="uid://ln3y7m0ljnyn" path="res://assets/animations/Farelie Couch Scene Demo/bmorgan sitting.png" id="14_fx6nh"]
|
||||
[ext_resource type="AudioStream" uid="uid://gqqkuyrpspjs" path="res://assets/audio/Teaser/footsteps/carpet/2.ogg" id="15_0nfu5"]
|
||||
[ext_resource type="AudioStream" uid="uid://by0v4dbdjcuv4" path="res://assets/audio/Teaser/footsteps/carpet/3.ogg" id="16_547j3"]
|
||||
[ext_resource type="AudioStream" uid="uid://b61xys0vhhlv4" path="res://assets/audio/Teaser/footsteps/carpet/4.ogg" id="17_dte3r"]
|
||||
[ext_resource type="AudioStream" uid="uid://bglirrx16sho8" path="res://assets/audio/Teaser/footsteps/carpet/5.ogg" id="18_ual73"]
|
||||
[ext_resource type="AudioStream" uid="uid://blhws6e67v6dh" path="res://assets/audio/Teaser/footsteps/carpet/6.ogg" id="19_80pmm"]
|
||||
[ext_resource type="AudioStream" uid="uid://b0bdvc0s5gwly" path="res://assets/audio/Teaser/foley/couch_shuffle.ogg" id="21_7p3kp"]
|
||||
[ext_resource type="AudioStream" uid="uid://d0j8arv3f7e6p" path="res://assets/audio/Teaser/foley/couch_sit.ogg" id="22_gon6y"]
|
||||
|
||||
[sub_resource type="SpriteFrames" id="SpriteFrames_pay87"]
|
||||
animations = [{
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("3_7jslv")
|
||||
}],
|
||||
"loop": false,
|
||||
"name": &"IdleStart",
|
||||
"speed": 5.0
|
||||
}, {
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("4_gwf4p")
|
||||
}],
|
||||
"loop": false,
|
||||
"name": &"Look",
|
||||
"speed": 5.0
|
||||
}, {
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("5_qqy5f")
|
||||
}],
|
||||
"loop": false,
|
||||
"name": &"Switch",
|
||||
"speed": 5.0
|
||||
}]
|
||||
|
||||
[sub_resource type="SpriteFrames" id="SpriteFrames_ql8wg"]
|
||||
animations = [{
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("10_rwpm7")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("11_37lt8")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("12_7cm0n")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("13_bpkt6")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"Walking",
|
||||
"speed": 5.0
|
||||
}]
|
||||
|
||||
[sub_resource type="Animation" id="Animation_f5iku"]
|
||||
length = 0.001
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("SpriteHolder/MorganSit:visible")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("SpriteHolder/FarelieAnimation:animation")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [&"IdleStart"]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("SpriteHolder/MorganWalkAnimation:position")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector2(1084, 95)]
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("SpriteHolder/MorganWalkAnimation:visible")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [true]
|
||||
}
|
||||
tracks/4/type = "value"
|
||||
tracks/4/imported = false
|
||||
tracks/4/enabled = true
|
||||
tracks/4/path = NodePath("SpriteHolder/MorganSit:position")
|
||||
tracks/4/interp = 1
|
||||
tracks/4/loop_wrap = true
|
||||
tracks/4/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector2(0, 0)]
|
||||
}
|
||||
tracks/5/type = "value"
|
||||
tracks/5/imported = false
|
||||
tracks/5/enabled = true
|
||||
tracks/5/path = NodePath(".:playFootsteps")
|
||||
tracks/5/interp = 1
|
||||
tracks/5/loop_wrap = true
|
||||
tracks/5/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/6/type = "value"
|
||||
tracks/6/imported = false
|
||||
tracks/6/enabled = true
|
||||
tracks/6/path = NodePath("CouchShuffle:playing")
|
||||
tracks/6/interp = 1
|
||||
tracks/6/loop_wrap = true
|
||||
tracks/6/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/7/type = "value"
|
||||
tracks/7/imported = false
|
||||
tracks/7/enabled = true
|
||||
tracks/7/path = NodePath("CouchSit:playing")
|
||||
tracks/7/interp = 1
|
||||
tracks/7/loop_wrap = true
|
||||
tracks/7/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_q6527"]
|
||||
resource_name = "cutscene"
|
||||
length = 12.0
|
||||
step = 0.0625
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("SpriteHolder/MorganSit:visible")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 7.625),
|
||||
"transitions": PackedFloat32Array(0, 1),
|
||||
"update": 1,
|
||||
"values": [false, true]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("SpriteHolder/FarelieAnimation:animation")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0, 2, 10.0156),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 1,
|
||||
"values": [&"IdleStart", &"Look", &"Switch"]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("SpriteHolder/MorganWalkAnimation:position")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0, 3, 7.625),
|
||||
"transitions": PackedFloat32Array(1, 0.8, 1),
|
||||
"update": 0,
|
||||
"values": [Vector2(1084, 95), Vector2(1084, 95), Vector2(-374, 95)]
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("SpriteHolder/MorganWalkAnimation:visible")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"times": PackedFloat32Array(0, 7.625),
|
||||
"transitions": PackedFloat32Array(0, 1),
|
||||
"update": 1,
|
||||
"values": [true, false]
|
||||
}
|
||||
tracks/4/type = "value"
|
||||
tracks/4/imported = false
|
||||
tracks/4/enabled = true
|
||||
tracks/4/path = NodePath("SpriteHolder/MorganSit:position")
|
||||
tracks/4/interp = 1
|
||||
tracks/4/loop_wrap = true
|
||||
tracks/4/keys = {
|
||||
"times": PackedFloat32Array(0, 10.0625, 10.125, 10.1875, 10.3125),
|
||||
"transitions": PackedFloat32Array(1, 1, 1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector2(0, 0), Vector2(0, 0), Vector2(3, 0), Vector2(-3, 0), Vector2(0, 0)]
|
||||
}
|
||||
tracks/5/type = "value"
|
||||
tracks/5/imported = false
|
||||
tracks/5/enabled = true
|
||||
tracks/5/path = NodePath(".:playFootsteps")
|
||||
tracks/5/interp = 1
|
||||
tracks/5/loop_wrap = true
|
||||
tracks/5/keys = {
|
||||
"times": PackedFloat32Array(0, 3, 7.625),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 1,
|
||||
"values": [false, true, false]
|
||||
}
|
||||
tracks/6/type = "value"
|
||||
tracks/6/imported = false
|
||||
tracks/6/enabled = true
|
||||
tracks/6/path = NodePath("CouchShuffle:playing")
|
||||
tracks/6/interp = 1
|
||||
tracks/6/loop_wrap = true
|
||||
tracks/6/keys = {
|
||||
"times": PackedFloat32Array(9.75),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [true]
|
||||
}
|
||||
tracks/7/type = "value"
|
||||
tracks/7/imported = false
|
||||
tracks/7/enabled = true
|
||||
tracks/7/path = NodePath("CouchSit:playing")
|
||||
tracks/7/interp = 1
|
||||
tracks/7/loop_wrap = true
|
||||
tracks/7/keys = {
|
||||
"times": PackedFloat32Array(7.5625),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [true]
|
||||
}
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_b1uns"]
|
||||
_data = {
|
||||
&"RESET": SubResource("Animation_f5iku"),
|
||||
&"cutscene": SubResource("Animation_q6527")
|
||||
}
|
||||
|
||||
[node name="FarelieCouchScene" type="Control" groups=["cutscene"]]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1_6w6vj")
|
||||
nextScene_ = ExtResource("2_i1ike")
|
||||
|
||||
[node name="ColorRect" type="ColorRect" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
color = Color(0, 0, 0, 1)
|
||||
|
||||
[node name="SpriteHolder" type="Node2D" parent="."]
|
||||
position = Vector2(1036, 500)
|
||||
|
||||
[node name="Background" type="Sprite2D" parent="SpriteHolder"]
|
||||
light_mask = 0
|
||||
texture = ExtResource("1_4f7kp")
|
||||
|
||||
[node name="TV" type="Sprite2D" parent="SpriteHolder"]
|
||||
light_mask = 0
|
||||
texture = ExtResource("2_1f4gm")
|
||||
|
||||
[node name="FarelieAnimation" type="AnimatedSprite2D" parent="SpriteHolder"]
|
||||
light_mask = 0
|
||||
sprite_frames = SubResource("SpriteFrames_pay87")
|
||||
animation = &"IdleStart"
|
||||
autoplay = "IdleStart"
|
||||
|
||||
[node name="MorganSit" type="Sprite2D" parent="SpriteHolder"]
|
||||
visible = false
|
||||
light_mask = 0
|
||||
texture = ExtResource("14_fx6nh")
|
||||
|
||||
[node name="CouchArmOverlay" type="Sprite2D" parent="SpriteHolder"]
|
||||
light_mask = 0
|
||||
texture = ExtResource("9_vusfd")
|
||||
|
||||
[node name="MorganWalkAnimation" type="AnimatedSprite2D" parent="SpriteHolder"]
|
||||
position = Vector2(1084, 95)
|
||||
sprite_frames = SubResource("SpriteFrames_ql8wg")
|
||||
animation = &"Walking"
|
||||
autoplay = "Walking"
|
||||
flip_h = true
|
||||
|
||||
[node name="SoundsContainer" type="Node2D" parent="SpriteHolder/MorganWalkAnimation"]
|
||||
|
||||
[node name="StepSFX1" type="AudioStreamPlayer2D" parent="SpriteHolder/MorganWalkAnimation/SoundsContainer"]
|
||||
stream = ExtResource("14_2w3io")
|
||||
|
||||
[node name="StepSFX2" type="AudioStreamPlayer2D" parent="SpriteHolder/MorganWalkAnimation/SoundsContainer"]
|
||||
stream = ExtResource("15_0nfu5")
|
||||
|
||||
[node name="StepSFX3" type="AudioStreamPlayer2D" parent="SpriteHolder/MorganWalkAnimation/SoundsContainer"]
|
||||
stream = ExtResource("16_547j3")
|
||||
|
||||
[node name="StepSFX4" type="AudioStreamPlayer2D" parent="SpriteHolder/MorganWalkAnimation/SoundsContainer"]
|
||||
stream = ExtResource("17_dte3r")
|
||||
|
||||
[node name="StepSFX5" type="AudioStreamPlayer2D" parent="SpriteHolder/MorganWalkAnimation/SoundsContainer"]
|
||||
stream = ExtResource("18_ual73")
|
||||
|
||||
[node name="StepSFX6" type="AudioStreamPlayer2D" parent="SpriteHolder/MorganWalkAnimation/SoundsContainer"]
|
||||
stream = ExtResource("19_80pmm")
|
||||
|
||||
[node name="LivingroomOverlay" type="PointLight2D" parent="SpriteHolder"]
|
||||
blend_mode = 2
|
||||
texture = ExtResource("13_pk8hn")
|
||||
|
||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
||||
libraries = {
|
||||
&"": SubResource("AnimationLibrary_b1uns")
|
||||
}
|
||||
|
||||
[node name="CouchShuffle" type="AudioStreamPlayer" parent="."]
|
||||
stream = ExtResource("21_7p3kp")
|
||||
volume_db = 3.759
|
||||
|
||||
[node name="CouchSit" type="AudioStreamPlayer" parent="."]
|
||||
stream = ExtResource("22_gon6y")
|
||||
volume_db = -3.748
|
||||
|
||||
[connection signal="frame_changed" from="SpriteHolder/MorganWalkAnimation" to="." method="_on_morgan_walk_animation_frame_changed"]
|
||||
[connection signal="animation_finished" from="AnimationPlayer" to="." method="_on_animation_player_animation_finished"]
|
||||
@@ -0,0 +1,51 @@
|
||||
extends Control
|
||||
|
||||
@onready var fp_animation: AnimatedSprite2D = $SpriteHolder/FPAnimation
|
||||
@onready var morgan_sprite: Sprite2D = $SpriteHolder/MorganSprite
|
||||
@onready var farelie_sprite: Sprite2D = $SpriteHolder/FarelieSprite
|
||||
@onready var morgan_attack_animation: AnimatedSprite2D = $SpriteHolder/MorganAttackAnimation
|
||||
@onready var black_overlay: ColorRect = $BlackOverlay
|
||||
@onready var lunge_sound: AudioStreamPlayer = $LungeSound
|
||||
|
||||
##Delay to add to the scene before automatically starting the animation
|
||||
@export var startDelay := 3.0
|
||||
##Delay to add at the end of the animation before fading to black
|
||||
@export var endDelay := 0.5
|
||||
##Next scene to load once animation finishes
|
||||
@export var nextScene_ : PackedScene
|
||||
|
||||
|
||||
var timeline = "demo_fp_office_1"
|
||||
|
||||
func _ready() -> void:
|
||||
await get_tree().create_timer(1.0).timeout
|
||||
TeaserMusicManager.playMusic(TeaserMusicManager.therapy1Music)
|
||||
await get_tree().create_timer(startDelay).timeout
|
||||
DialogManager.start_cutscene_dialog(timeline)
|
||||
|
||||
func _on_dialog_ended() -> void:
|
||||
print("Dialog end!")
|
||||
await get_tree().create_timer(1.0).timeout
|
||||
TeaserMusicManager.stopMusic()
|
||||
fp_animation.visible = false
|
||||
morgan_attack_animation.visible = true
|
||||
morgan_attack_animation.play("Attack")
|
||||
|
||||
#Code to call at specific frames during the attack animation
|
||||
func _on_morgan_attack_animation_frame_changed() -> void:
|
||||
if morgan_attack_animation.get_frame() == 12:
|
||||
morgan_sprite.visible = false
|
||||
if morgan_attack_animation.get_frame() == 25:
|
||||
farelie_sprite.visible = false
|
||||
if morgan_attack_animation.get_frame() == 0:
|
||||
lunge_sound.play()
|
||||
|
||||
#Code to call when the animation finishes
|
||||
func _on_morgan_attack_animation_animation_finished() -> void:
|
||||
print("Animation finished!")
|
||||
black_overlay.visible = true
|
||||
await get_tree().create_timer(endDelay).timeout
|
||||
SceneManager.load_raw_packedScene(nextScene_, true, 0.5, 0.5, 0.25, 2.0)
|
||||
|
||||
func fadeMusicOut() -> void:
|
||||
TeaserMusicManager.stopMusic()
|
||||
@@ -0,0 +1 @@
|
||||
uid://di48mxoa3tji7
|
||||
@@ -0,0 +1,238 @@
|
||||
[gd_scene load_steps=46 format=3 uid="uid://cewt73cgsvbdp"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://be408pj2c2ppf" path="res://assets/animations/FP Office Scene Demo/fp office back.png" id="1_1jpu6"]
|
||||
[ext_resource type="Script" uid="uid://di48mxoa3tji7" path="res://Cutscenes/fp_office_1_scene.gd" id="1_squ8y"]
|
||||
[ext_resource type="Texture2D" uid="uid://bqahwv1ebadps" path="res://assets/animations/FP Office Scene Demo/fp office front.png" id="2_g5fjh"]
|
||||
[ext_resource type="PackedScene" uid="uid://dvfye263gat8k" path="res://Cutscenes/outside_kids_scene.tscn" id="2_yntp6"]
|
||||
[ext_resource type="Texture2D" uid="uid://cjy6nbu5wn5j7" path="res://assets/animations/FP Office Scene Demo/fp 2.png" id="3_sgget"]
|
||||
[ext_resource type="Texture2D" uid="uid://d0j5vs6ri3ub6" path="res://assets/animations/FP Office Scene Demo/fp 1.png" id="4_quk3f"]
|
||||
[ext_resource type="Texture2D" uid="uid://b45dpokqclg8l" path="res://assets/animations/FP Office Scene Demo/bmorgan sit.png" id="5_oesak"]
|
||||
[ext_resource type="Texture2D" uid="uid://cu5ikxtxmva05" path="res://assets/animations/FP Office Scene Demo/farelie sit fp office.png" id="6_3t3ca"]
|
||||
[ext_resource type="Texture2D" uid="uid://de5skt56v31x7" path="res://assets/animations/FP Office Scene Demo/animation/Timeline 1_0000.png" id="8_pqxen"]
|
||||
[ext_resource type="Texture2D" uid="uid://clmivny75kiei" path="res://assets/animations/FP Office Scene Demo/animation/Timeline 1_0001.png" id="9_e0bq8"]
|
||||
[ext_resource type="Texture2D" uid="uid://db0ggh5r04svs" path="res://assets/animations/FP Office Scene Demo/animation/Timeline 1_0002.png" id="10_2mfhb"]
|
||||
[ext_resource type="Texture2D" uid="uid://c27eupq205pyp" path="res://assets/animations/FP Office Scene Demo/animation/Timeline 1_0003.png" id="11_j5gbd"]
|
||||
[ext_resource type="Texture2D" uid="uid://cryvbexfmeukc" path="res://assets/animations/FP Office Scene Demo/animation/Timeline 1_0004.png" id="12_aniun"]
|
||||
[ext_resource type="Texture2D" uid="uid://c3y4srveqsdde" path="res://assets/animations/FP Office Scene Demo/animation/Timeline 1_0005.png" id="13_eonjl"]
|
||||
[ext_resource type="Texture2D" uid="uid://4kft8a1qyvlc" path="res://assets/animations/FP Office Scene Demo/animation/Timeline 1_0006.png" id="14_vibfp"]
|
||||
[ext_resource type="Texture2D" uid="uid://c30lktr5wqjk6" path="res://assets/animations/FP Office Scene Demo/animation/Timeline 1_0007.png" id="15_qo0sf"]
|
||||
[ext_resource type="Texture2D" uid="uid://c8f0ixcj12i4l" path="res://assets/animations/FP Office Scene Demo/animation/Timeline 1_0008.png" id="16_8a112"]
|
||||
[ext_resource type="Texture2D" uid="uid://bjchsl3xpsntk" path="res://assets/animations/FP Office Scene Demo/animation/Timeline 1_0009.png" id="17_15goy"]
|
||||
[ext_resource type="Texture2D" uid="uid://u5pigyvhybna" path="res://assets/animations/FP Office Scene Demo/animation/Timeline 1_0010.png" id="18_wj1wv"]
|
||||
[ext_resource type="Texture2D" uid="uid://bhs8bkujqpou7" path="res://assets/animations/FP Office Scene Demo/animation/Timeline 1_0011.png" id="19_56vl6"]
|
||||
[ext_resource type="Texture2D" uid="uid://dcj606o62uwiv" path="res://assets/animations/FP Office Scene Demo/animation/Timeline 1_0012.png" id="20_e5k52"]
|
||||
[ext_resource type="Texture2D" uid="uid://4efbcyrgkjqm" path="res://assets/animations/FP Office Scene Demo/animation/Timeline 1_0013.png" id="21_kjl1a"]
|
||||
[ext_resource type="Texture2D" uid="uid://bn0m6je4gqwb3" path="res://assets/animations/FP Office Scene Demo/animation/Timeline 1_0014.png" id="22_frfdv"]
|
||||
[ext_resource type="Texture2D" uid="uid://dqbwph54nc241" path="res://assets/animations/FP Office Scene Demo/animation/Timeline 1_0015.png" id="23_qj15w"]
|
||||
[ext_resource type="Texture2D" uid="uid://bpuymltsil5wb" path="res://assets/animations/FP Office Scene Demo/animation/Timeline 1_0016.png" id="24_dy5d4"]
|
||||
[ext_resource type="Texture2D" uid="uid://cblaviw4qow0s" path="res://assets/animations/FP Office Scene Demo/animation/Timeline 1_0017.png" id="25_mrr5a"]
|
||||
[ext_resource type="Texture2D" uid="uid://b1fb0w4b7fs78" path="res://assets/animations/FP Office Scene Demo/animation/Timeline 1_0018.png" id="26_2bacx"]
|
||||
[ext_resource type="Texture2D" uid="uid://df74rh7jrg8qf" path="res://assets/animations/FP Office Scene Demo/animation/Timeline 1_0019.png" id="27_21qjc"]
|
||||
[ext_resource type="Texture2D" uid="uid://d0fmnk2mwnl0j" path="res://assets/animations/FP Office Scene Demo/animation/Timeline 1_0020.png" id="28_d62kw"]
|
||||
[ext_resource type="Texture2D" uid="uid://c52p0lwjnafry" path="res://assets/animations/FP Office Scene Demo/animation/Timeline 1_0021.png" id="29_kohci"]
|
||||
[ext_resource type="Texture2D" uid="uid://dlppplpbgq54s" path="res://assets/animations/FP Office Scene Demo/animation/Timeline 1_0022.png" id="30_wmkiv"]
|
||||
[ext_resource type="Texture2D" uid="uid://bneeghj12orre" path="res://assets/animations/FP Office Scene Demo/animation/Timeline 1_0023.png" id="31_uppbl"]
|
||||
[ext_resource type="Texture2D" uid="uid://bavtb65q4i8ly" path="res://assets/animations/FP Office Scene Demo/animation/Timeline 1_0024.png" id="32_3ftdb"]
|
||||
[ext_resource type="Texture2D" uid="uid://mgsislq1wnmv" path="res://assets/animations/FP Office Scene Demo/animation/Timeline 1_0025.png" id="33_8is2d"]
|
||||
[ext_resource type="Texture2D" uid="uid://dadiet7hu0vr3" path="res://assets/animations/FP Office Scene Demo/animation/Timeline 1_0026.png" id="34_uhmsk"]
|
||||
[ext_resource type="Texture2D" uid="uid://stg4hvuktdni" path="res://assets/animations/FP Office Scene Demo/animation/Timeline 1_0027.png" id="35_uapjs"]
|
||||
[ext_resource type="Texture2D" uid="uid://bnvyjk42akl7h" path="res://assets/animations/FP Office Scene Demo/animation/Timeline 1_0028.png" id="36_ksaq2"]
|
||||
[ext_resource type="Texture2D" uid="uid://drpl27qbd3elx" path="res://assets/animations/FP Office Scene Demo/animation/Timeline 1_0029.png" id="37_kopic"]
|
||||
[ext_resource type="Texture2D" uid="uid://dq41cdrxfevtw" path="res://assets/animations/FP Office Scene Demo/animation/Timeline 1_0030.png" id="38_w46gw"]
|
||||
[ext_resource type="Texture2D" uid="uid://bjfu61cshl7px" path="res://assets/animations/FP Office Scene Demo/animation/Timeline 1_0031.png" id="39_6k7hb"]
|
||||
[ext_resource type="Texture2D" uid="uid://du0gp15nmj0ca" path="res://assets/animations/FP Office Scene Demo/animation/Timeline 1_0032.png" id="40_1k5at"]
|
||||
[ext_resource type="Texture2D" uid="uid://d0p612rfoj0r6" path="res://assets/animations/FP Office Scene Demo/animation/Timeline 1_0033.png" id="41_q261b"]
|
||||
[ext_resource type="AudioStream" uid="uid://cxv7xtefdyxq4" path="res://assets/audio/Teaser/animations/morgan_fp_lunge.ogg" id="43_xe78c"]
|
||||
|
||||
[sub_resource type="SpriteFrames" id="SpriteFrames_ig6kj"]
|
||||
animations = [{
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("3_sgget")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"HandRaise",
|
||||
"speed": 5.0
|
||||
}, {
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("4_quk3f")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"Neutral",
|
||||
"speed": 5.0
|
||||
}]
|
||||
|
||||
[sub_resource type="SpriteFrames" id="SpriteFrames_k16ku"]
|
||||
animations = [{
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("8_pqxen")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("9_e0bq8")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("10_2mfhb")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("11_j5gbd")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("12_aniun")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("13_eonjl")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("14_vibfp")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("15_qo0sf")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("16_8a112")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("17_15goy")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("18_wj1wv")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("19_56vl6")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("20_e5k52")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("21_kjl1a")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("22_frfdv")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("23_qj15w")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("24_dy5d4")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("25_mrr5a")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("26_2bacx")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("27_21qjc")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("28_d62kw")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("29_kohci")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("30_wmkiv")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("31_uppbl")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("32_3ftdb")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("33_8is2d")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("34_uhmsk")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("35_uapjs")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("36_ksaq2")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("37_kopic")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("38_w46gw")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("39_6k7hb")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("40_1k5at")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("41_q261b")
|
||||
}],
|
||||
"loop": false,
|
||||
"name": &"Attack",
|
||||
"speed": 12.0
|
||||
}]
|
||||
|
||||
[node name="FPOffice1Scene" type="Control" groups=["cutscene"]]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1_squ8y")
|
||||
nextScene_ = ExtResource("2_yntp6")
|
||||
|
||||
[node name="ColorRect" type="ColorRect" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
color = Color(0, 0, 0, 1)
|
||||
|
||||
[node name="SpriteHolder" type="Node2D" parent="."]
|
||||
position = Vector2(960, 500)
|
||||
|
||||
[node name="Background" type="Sprite2D" parent="SpriteHolder"]
|
||||
texture = ExtResource("1_1jpu6")
|
||||
|
||||
[node name="Foreground" type="Sprite2D" parent="SpriteHolder"]
|
||||
z_index = 1
|
||||
texture = ExtResource("2_g5fjh")
|
||||
|
||||
[node name="FPAnimation" type="AnimatedSprite2D" parent="SpriteHolder"]
|
||||
sprite_frames = SubResource("SpriteFrames_ig6kj")
|
||||
animation = &"Neutral"
|
||||
autoplay = "Neutral"
|
||||
|
||||
[node name="MorganSprite" type="Sprite2D" parent="SpriteHolder"]
|
||||
texture = ExtResource("5_oesak")
|
||||
|
||||
[node name="FarelieSprite" type="Sprite2D" parent="SpriteHolder"]
|
||||
texture = ExtResource("6_3t3ca")
|
||||
|
||||
[node name="MorganAttackAnimation" type="AnimatedSprite2D" parent="SpriteHolder"]
|
||||
visible = false
|
||||
sprite_frames = SubResource("SpriteFrames_k16ku")
|
||||
animation = &"Attack"
|
||||
frame = 33
|
||||
frame_progress = 1.0
|
||||
|
||||
[node name="BlackOverlay" type="ColorRect" parent="."]
|
||||
visible = false
|
||||
z_index = 1
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
color = Color(0, 0, 0, 1)
|
||||
|
||||
[node name="LungeSound" type="AudioStreamPlayer" parent="."]
|
||||
stream = ExtResource("43_xe78c")
|
||||
|
||||
[connection signal="animation_finished" from="SpriteHolder/MorganAttackAnimation" to="." method="_on_morgan_attack_animation_animation_finished"]
|
||||
[connection signal="frame_changed" from="SpriteHolder/MorganAttackAnimation" to="." method="_on_morgan_attack_animation_frame_changed"]
|
||||
@@ -0,0 +1,24 @@
|
||||
extends Control
|
||||
|
||||
##Delay to add to the scene before automatically starting the animation
|
||||
@export var startDelay := 3.0
|
||||
##Delay to add at the end of the animation before fading to black
|
||||
@export var endDelay := 1.0
|
||||
##Next scene to load once animation finishes
|
||||
@export var nextScene_ : PackedScene
|
||||
|
||||
var timeline = "demo_fp_office_2"
|
||||
|
||||
func _ready() -> void:
|
||||
await get_tree().create_timer(1.0).timeout
|
||||
TeaserMusicManager.playMusic(TeaserMusicManager.therapy2Music, true)
|
||||
await get_tree().create_timer(startDelay).timeout
|
||||
DialogManager.start_cutscene_dialog(timeline)
|
||||
|
||||
func _on_dialog_ended() -> void:
|
||||
print("Dialog end!")
|
||||
await get_tree().create_timer(endDelay).timeout
|
||||
TeaserMusicManager.stopMusic()
|
||||
#TODO: Update this to not be the splash screen whenever
|
||||
var splash : PackedScene = load("res://Cutscenes/shilling.tscn")
|
||||
SceneManager.load_raw_packedScene(splash, true, 0.5, 0.0, 0.5, 2.0)
|
||||
@@ -0,0 +1 @@
|
||||
uid://bl4b6xk82o5io
|
||||
@@ -0,0 +1,84 @@
|
||||
[gd_scene load_steps=10 format=3 uid="uid://do02pipjv4w4r"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://bl4b6xk82o5io" path="res://Cutscenes/fp_office_2_scene.gd" id="1_swhtc"]
|
||||
[ext_resource type="Texture2D" uid="uid://be408pj2c2ppf" path="res://assets/animations/FP Office Scene Demo/fp office back.png" id="2_wgno0"]
|
||||
[ext_resource type="Texture2D" uid="uid://cjy6nbu5wn5j7" path="res://assets/animations/FP Office Scene Demo/fp 2.png" id="3_qwbn3"]
|
||||
[ext_resource type="Texture2D" uid="uid://d0j5vs6ri3ub6" path="res://assets/animations/FP Office Scene Demo/fp 1.png" id="4_l5bo0"]
|
||||
[ext_resource type="Texture2D" uid="uid://be3bj75uocsis" path="res://assets/animations/FP Office Scene Demo/morgan sit fp office b.png" id="5_pku6c"]
|
||||
[ext_resource type="Texture2D" uid="uid://cchs4d6wnp2ge" path="res://assets/animations/FP Office Scene Demo/morgan sit fp office a.png" id="6_03hmb"]
|
||||
[ext_resource type="Texture2D" uid="uid://bqahwv1ebadps" path="res://assets/animations/FP Office Scene Demo/fp office front.png" id="7_d08ks"]
|
||||
|
||||
[sub_resource type="SpriteFrames" id="SpriteFrames_0auge"]
|
||||
animations = [{
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("3_qwbn3")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"HandRaise",
|
||||
"speed": 5.0
|
||||
}, {
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("4_l5bo0")
|
||||
}],
|
||||
"loop": false,
|
||||
"name": &"Neutral",
|
||||
"speed": 5.0
|
||||
}]
|
||||
|
||||
[sub_resource type="SpriteFrames" id="SpriteFrames_6m3qf"]
|
||||
animations = [{
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("5_pku6c")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"LookDown",
|
||||
"speed": 5.0
|
||||
}, {
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("6_03hmb")
|
||||
}],
|
||||
"loop": false,
|
||||
"name": &"Neutral",
|
||||
"speed": 5.0
|
||||
}]
|
||||
|
||||
[node name="FPOffice2Scene" type="Control" groups=["cutscene"]]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1_swhtc")
|
||||
|
||||
[node name="ColorRect" type="ColorRect" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
color = Color(0, 0, 0, 1)
|
||||
|
||||
[node name="SpriteHolder" type="Node2D" parent="."]
|
||||
position = Vector2(960, 500)
|
||||
|
||||
[node name="Background" type="Sprite2D" parent="SpriteHolder"]
|
||||
texture = ExtResource("2_wgno0")
|
||||
|
||||
[node name="FPAnimation" type="AnimatedSprite2D" parent="SpriteHolder"]
|
||||
sprite_frames = SubResource("SpriteFrames_0auge")
|
||||
animation = &"Neutral"
|
||||
autoplay = "Neutral"
|
||||
|
||||
[node name="MorganAnimation" type="AnimatedSprite2D" parent="SpriteHolder"]
|
||||
sprite_frames = SubResource("SpriteFrames_6m3qf")
|
||||
animation = &"Neutral"
|
||||
autoplay = "Neutral"
|
||||
|
||||
[node name="Foreground" type="Sprite2D" parent="SpriteHolder"]
|
||||
texture = ExtResource("7_d08ks")
|
||||
@@ -0,0 +1,29 @@
|
||||
extends Control
|
||||
|
||||
@onready var farelie: AnimatedSprite2D = $SpriteHolder/Farelie
|
||||
@onready var animation_player: AnimationPlayer = $AnimationPlayer
|
||||
|
||||
##Delay to add to the scene before automatically starting the animation
|
||||
@export var startDelay := 3.0
|
||||
##Delay to add at the end of the animation before fading to black
|
||||
@export var endDelay := 1.0
|
||||
##Next scene to load once animation finishes
|
||||
@export var nextScene_ : PackedScene
|
||||
|
||||
var timeline = "demo_hospital"
|
||||
|
||||
func _ready() -> void:
|
||||
#Shows the mouse because previous cutscene will hide it if video isn't skipped
|
||||
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
|
||||
animation_player.play("EKGFadeIn")
|
||||
await get_tree().create_timer(3.5).timeout
|
||||
animation_player.play("HospitalAmbFadeIn")
|
||||
await get_tree().create_timer(startDelay).timeout
|
||||
TeaserPauseManager.setCanPause(true)
|
||||
DialogManager.start_cutscene_dialog(timeline)
|
||||
|
||||
func _on_dialog_ended() -> void:
|
||||
print("Dialog end!")
|
||||
await get_tree().create_timer(endDelay).timeout
|
||||
animation_player.play("AmbienceFadeOut")
|
||||
SceneManager.load_raw_packedScene(nextScene_, true, 0.25, 0.0, 0.25, 2.0)
|
||||
@@ -0,0 +1 @@
|
||||
uid://d0glm0ycr6mtb
|
||||
@@ -0,0 +1,213 @@
|
||||
[gd_scene load_steps=19 format=3 uid="uid://g3x1qbgfttxc"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://i8njblp615et" path="res://assets/animations/Hospital Scene Demo/hospital back.png" id="1_215e6"]
|
||||
[ext_resource type="Script" uid="uid://d0glm0ycr6mtb" path="res://Cutscenes/hospital_scene.gd" id="1_of42s"]
|
||||
[ext_resource type="PackedScene" uid="uid://bjoinf0i1vjel" path="res://Cutscenes/bathroom_1_scene.tscn" id="2_db5bu"]
|
||||
[ext_resource type="Texture2D" uid="uid://1s6i125jpke3" path="res://assets/animations/Hospital Scene Demo/hospital front.png" id="2_sql2e"]
|
||||
[ext_resource type="Texture2D" uid="uid://crm467ihwqhn" path="res://assets/animations/Hospital Scene Demo/morgan hospital hand.png" id="3_q1h3e"]
|
||||
[ext_resource type="Texture2D" uid="uid://cusxcnmokqso5" path="res://assets/animations/Hospital Scene Demo/morgan hospital head.png" id="4_hlaxd"]
|
||||
[ext_resource type="Texture2D" uid="uid://c5rv011erwbgt" path="res://assets/animations/Hospital Scene Demo/farelie sit awake.png" id="5_fc2v4"]
|
||||
[ext_resource type="Texture2D" uid="uid://ba87gs8o7hhm0" path="res://assets/animations/Hospital Scene Demo/farelie sit sleep.png" id="6_s55cl"]
|
||||
[ext_resource type="Texture2D" uid="uid://dvc255ashxdj2" path="res://assets/animations/Hospital Scene Demo/farelie sit smile.png" id="7_es4ij"]
|
||||
[ext_resource type="AudioStream" uid="uid://bb227rljs1fi2" path="res://assets/audio/Teaser/ambience/ekg.ogg" id="10_gaf5j"]
|
||||
[ext_resource type="AudioStream" uid="uid://chjfixj3w1mgr" path="res://assets/audio/Teaser/ambience/hospital.ogg" id="11_t0fqb"]
|
||||
|
||||
[sub_resource type="SpriteFrames" id="SpriteFrames_sqwjg"]
|
||||
animations = [{
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("5_fc2v4")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"Awake",
|
||||
"speed": 5.0
|
||||
}, {
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("6_s55cl")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"Sleep",
|
||||
"speed": 5.0
|
||||
}, {
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("7_es4ij")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"Smile",
|
||||
"speed": 5.0
|
||||
}]
|
||||
|
||||
[sub_resource type="Animation" id="Animation_niov0"]
|
||||
resource_name = "AmbienceFadeOut"
|
||||
length = 3.0
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("HospitalAmbience:volume_db")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 3),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [-10.0, -60.0]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("EKGAmbience:volume_db")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0, 3),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [-25.0, -60.0]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_fagg5"]
|
||||
resource_name = "EKGFadeIn"
|
||||
length = 6.0
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("EKGAmbience:volume_db")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 3, 6),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [-60.0, -10.0, -22.523]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_t3vl7"]
|
||||
resource_name = "EKGFadeOut"
|
||||
length = 5.0
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("EKGAmbience:volume_db")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 5),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [-10.0, -25.0]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_cv2pg"]
|
||||
resource_name = "HospitalAmbFadeIn"
|
||||
length = 2.0
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("HospitalAmbience:volume_db")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 2),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [-60.0, -10.0]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_sk6hg"]
|
||||
length = 0.001
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("EKGAmbience:volume_db")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [-60.0]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("HospitalAmbience:volume_db")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [-60.0]
|
||||
}
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_q3jnw"]
|
||||
_data = {
|
||||
&"AmbienceFadeOut": SubResource("Animation_niov0"),
|
||||
&"EKGFadeIn": SubResource("Animation_fagg5"),
|
||||
&"EKGFadeOut": SubResource("Animation_t3vl7"),
|
||||
&"HospitalAmbFadeIn": SubResource("Animation_cv2pg"),
|
||||
&"RESET": SubResource("Animation_sk6hg")
|
||||
}
|
||||
|
||||
[node name="HospitalScene" type="Control" groups=["cutscene"]]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1_of42s")
|
||||
nextScene_ = ExtResource("2_db5bu")
|
||||
|
||||
[node name="ColorRect" type="ColorRect" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
color = Color(0, 0, 0, 1)
|
||||
|
||||
[node name="SpriteHolder" type="Node2D" parent="."]
|
||||
position = Vector2(960, 540)
|
||||
|
||||
[node name="HospitalBG" type="Sprite2D" parent="SpriteHolder"]
|
||||
texture = ExtResource("1_215e6")
|
||||
|
||||
[node name="HospitalFG" type="Sprite2D" parent="SpriteHolder"]
|
||||
z_index = 1
|
||||
texture = ExtResource("2_sql2e")
|
||||
|
||||
[node name="MorganSprites" type="Node2D" parent="SpriteHolder"]
|
||||
|
||||
[node name="Hand" type="Sprite2D" parent="SpriteHolder/MorganSprites"]
|
||||
z_index = 1
|
||||
texture = ExtResource("3_q1h3e")
|
||||
|
||||
[node name="Head" type="Sprite2D" parent="SpriteHolder/MorganSprites"]
|
||||
texture = ExtResource("4_hlaxd")
|
||||
|
||||
[node name="Farelie" type="AnimatedSprite2D" parent="SpriteHolder"]
|
||||
z_index = 1
|
||||
sprite_frames = SubResource("SpriteFrames_sqwjg")
|
||||
animation = &"Sleep"
|
||||
autoplay = "Sleep"
|
||||
|
||||
[node name="EKGAmbience" type="AudioStreamPlayer" parent="."]
|
||||
stream = ExtResource("10_gaf5j")
|
||||
volume_db = -60.0
|
||||
autoplay = true
|
||||
parameters/looping = true
|
||||
|
||||
[node name="HospitalAmbience" type="AudioStreamPlayer" parent="."]
|
||||
stream = ExtResource("11_t0fqb")
|
||||
volume_db = -60.0
|
||||
autoplay = true
|
||||
parameters/looping = true
|
||||
|
||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
||||
libraries = {
|
||||
&"": SubResource("AnimationLibrary_q3jnw")
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
extends Control
|
||||
|
||||
@onready var farelie_animation: AnimatedSprite2D = $SpriteHolder/FarelieAnimation
|
||||
@onready var morgan_head: Sprite2D = $SpriteHolder/MorganSprites/MorganHead
|
||||
@onready var animation_player: AnimationPlayer = $AnimationPlayer
|
||||
@onready var lights_out_nodes: Node2D = $SpriteHolder/LightsOutNodes
|
||||
@onready var light_switch_sfx: AudioStreamPlayer = $LightSwitchSFX
|
||||
@onready var sounds_container: Node2D = $SpriteHolder/LightsOutNodes/DoorwayClipZone/FarelieWalkAnim/SoundsContainer
|
||||
@onready var farelie_walk_anim: AnimatedSprite2D = $SpriteHolder/LightsOutNodes/DoorwayClipZone/FarelieWalkAnim
|
||||
@onready var knife_cutscene_audio: AudioStreamPlayer = $KnifeCutsceneAudio
|
||||
|
||||
##Delay to add to the scene before automatically starting the animation
|
||||
@export var startDelay := 4.0
|
||||
##Delay to add at the end of the animation before fading to black
|
||||
@export var endDelay := 2.0
|
||||
##Next scene to load once animation finishes
|
||||
@export var nextScene_ : PackedScene
|
||||
|
||||
##Tracks when the footstep sfx should be played. Controlled by AnimationPlayer.
|
||||
##Must be exported var so AnimationPlayer can modify it.
|
||||
@export var playFootsteps := false
|
||||
|
||||
var timeline = "demo_morgan_bedroom_cutting"
|
||||
|
||||
func _ready() -> void:
|
||||
animation_player.play("KnockSFX")
|
||||
await get_tree().create_timer(startDelay).timeout
|
||||
#Trigger the first half of the animation where the lights are out
|
||||
animation_player.play("MovingFade")
|
||||
|
||||
#Run code that needs to happen at specific frames during farelie's animation here
|
||||
func _on_farelie_animation_frame_changed() -> void:
|
||||
if farelie_animation.get_frame() == 262:
|
||||
morgan_head.visible = false
|
||||
|
||||
#Gets called when farelie's big animation ends, triggering dialog.
|
||||
func _on_farelie_animation_animation_finished() -> void:
|
||||
await get_tree().create_timer(0.5).timeout
|
||||
DialogManager.start_cutscene_dialog(timeline)
|
||||
|
||||
#Gets called when the first half of the animation finishes
|
||||
func _on_animation_player_animation_finished(anim_name: StringName) -> void:
|
||||
if anim_name == "MovingFade":
|
||||
lights_out_nodes.visible = false
|
||||
light_switch_sfx.play()
|
||||
TeaserMusicManager.playMusic(TeaserMusicManager.knifeAnimation)
|
||||
animation_player.play("AmbienceFadeout")
|
||||
farelie_animation.play("Animation")
|
||||
|
||||
#Gets called when dialog ends, triggering scene transition.
|
||||
func _on_dialog_ended() -> void:
|
||||
print("Dialog end!")
|
||||
await get_tree().create_timer(endDelay).timeout
|
||||
SceneManager.load_raw_packedScene(nextScene_, true, 0.25, 0.5, 0.25, 3.0)
|
||||
|
||||
#Runs when the FarelieWalkAnim node frame changes.
|
||||
func _on_farelie_walk_anim_frame_changed() -> void:
|
||||
if playFootsteps:
|
||||
if farelie_walk_anim.get_frame() == 1 or farelie_walk_anim.get_frame() == 3:
|
||||
var chosenStepSFX : AudioStreamPlayer2D = sounds_container.get_children()[randi() % sounds_container.get_children().size()]
|
||||
chosenStepSFX.play()
|
||||
@@ -0,0 +1 @@
|
||||
uid://6qu4wtmxu8x8
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,85 @@
|
||||
extends Control
|
||||
|
||||
@onready var animation_player: AnimationPlayer = $AnimationPlayer
|
||||
@onready var morgan_bathroom: Node2D = $SpriteHolder/MorganBathroom
|
||||
@onready var farelie_bedroom: Node2D = $SpriteHolder/FarelieBedroom
|
||||
@onready var morg_bedroom_haircut: Node2D = $SpriteHolder/MorgBedroomHaircut
|
||||
@onready var sounds_container: Node2D = $SpriteHolder/FarelieBedroom/LightsOff/Background/BMorganAnimation/SoundsContainer
|
||||
@onready var b_morgan_animation: AnimatedSprite2D = $SpriteHolder/FarelieBedroom/LightsOff/Background/BMorganAnimation
|
||||
|
||||
##Delay to add to the scene before automatically starting the animation
|
||||
@export var startDelay := 3.0
|
||||
##Delay to add at the end of the animation before fading to black
|
||||
@export var endDelay := 1.0
|
||||
##Next scene to load once animation finishes
|
||||
@export var nextScene_ : PackedScene
|
||||
|
||||
##Tracks when the footstep sfx should be played. Controlled by AnimationPlayer.
|
||||
##Must be exported var so AnimationPlayer can modify it.
|
||||
@export var playFootsteps := false
|
||||
|
||||
var bathroom_timeline = "demo_mhaircut_bathroom"
|
||||
var farelie_bedroom_timeline = "demo_mhaircut_fbedroom"
|
||||
var morgan_bedroom_timeline = "demo_mhaircut_end"
|
||||
|
||||
var mini_scene_tracker := 0
|
||||
|
||||
func _ready() -> void:
|
||||
randomize()
|
||||
await get_tree().create_timer(startDelay).timeout
|
||||
DialogManager.start_cutscene_dialog(bathroom_timeline)
|
||||
|
||||
#Called to start the animation in the farelie bedroom scene
|
||||
func farelie_bedroom_scene() -> void:
|
||||
animation_player.play("farelieBedroom")
|
||||
|
||||
#Called to start the dialog in the morgan bedroom haircut scene
|
||||
func morg_bedroom_haircut_scene() -> void:
|
||||
DialogManager.start_cutscene_dialog(morgan_bedroom_timeline)
|
||||
|
||||
func _on_dialog_ended() -> void:
|
||||
print("Dialog end!")
|
||||
#End of bathroom scene
|
||||
if mini_scene_tracker == 0:
|
||||
mini_scene_tracker += 1
|
||||
await get_tree().create_timer(1.0).timeout
|
||||
SceneManager.fade_animation_setup(0.5, 0.0)
|
||||
TeaserMusicManager.stopMusic()
|
||||
await SceneManager.play_animation("fadeToBlack")
|
||||
morgan_bathroom.visible = false
|
||||
farelie_bedroom.visible = true
|
||||
await get_tree().create_timer(0.5).timeout
|
||||
animation_player.play("FadeInAmbience")
|
||||
await SceneManager.play_animation("fadeFromBlack")
|
||||
await get_tree().create_timer(0.5).timeout
|
||||
farelie_bedroom_scene()
|
||||
return
|
||||
elif mini_scene_tracker == 1:
|
||||
mini_scene_tracker += 1
|
||||
await get_tree().create_timer(1.0).timeout
|
||||
SceneManager.fade_animation_setup(0.5, 0.0)
|
||||
animation_player.play("FadeOutMorganRoom")
|
||||
await SceneManager.play_animation("fadeToBlack")
|
||||
farelie_bedroom.visible = false
|
||||
morg_bedroom_haircut.visible = true
|
||||
await get_tree().create_timer(0.5).timeout
|
||||
TeaserMusicManager.playMusic(TeaserMusicManager.apartmentMusic)
|
||||
await SceneManager.play_animation("fadeFromBlack")
|
||||
await get_tree().create_timer(0.5).timeout
|
||||
morg_bedroom_haircut_scene()
|
||||
return
|
||||
elif mini_scene_tracker == 2:
|
||||
await get_tree().create_timer(endDelay).timeout
|
||||
SceneManager.load_raw_packedScene(nextScene_, true, 0.25, 0.5, 0.25, 2.0)
|
||||
|
||||
#Runs when the farelieBedroom animation ends, triggering dialog for that scene
|
||||
func _on_animation_player_animation_finished(_anim_name: StringName) -> void:
|
||||
if _anim_name == "farelieBedroom":
|
||||
DialogManager.start_cutscene_dialog(farelie_bedroom_timeline)
|
||||
|
||||
#Runs when bmorgan walking animation changes frames
|
||||
func _on_b_morgan_animation_frame_changed() -> void:
|
||||
if playFootsteps:
|
||||
if b_morgan_animation.get_frame() == 1 or b_morgan_animation.get_frame() == 3:
|
||||
var chosenStepSFX : AudioStreamPlayer2D = sounds_container.get_children()[randi() % sounds_container.get_children().size()]
|
||||
chosenStepSFX.play()
|
||||
@@ -0,0 +1 @@
|
||||
uid://tj00dlmjnmb4
|
||||
@@ -0,0 +1,627 @@
|
||||
[gd_scene load_steps=50 format=3 uid="uid://cp3q5dj8v5bhy"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://tj00dlmjnmb4" path="res://Cutscenes/morgan_haircut_scene.gd" id="1_0wmdc"]
|
||||
[ext_resource type="Texture2D" uid="uid://p2paavp831i2" path="res://assets/animations/Farelie Bedroom Scene Demo/room back.png" id="1_1w3nr"]
|
||||
[ext_resource type="Texture2D" uid="uid://dn42ud5ylkege" path="res://assets/animations/Morgan Bathroom Scene Demo/bathroom bg.png" id="1_mg6kt"]
|
||||
[ext_resource type="Texture2D" uid="uid://4h2ro3j6bdwb" path="res://assets/animations/Morgan Bathroom Scene Demo/morgan reflection 2.png" id="2_p5qiu"]
|
||||
[ext_resource type="Texture2D" uid="uid://4hhu5whlu168" path="res://assets/animations/Farelie Bedroom Scene Demo/room front.png" id="2_x04g7"]
|
||||
[ext_resource type="PackedScene" uid="uid://7utm6l1fkm4m" path="res://Cutscenes/farelie_cheeseburgers_scene.tscn" id="2_y8n3l"]
|
||||
[ext_resource type="Texture2D" uid="uid://b3tjlk04r2lvu" path="res://assets/animations/Farelie Bedroom Scene Demo/farelie sleep a.png" id="3_7r2ew"]
|
||||
[ext_resource type="Texture2D" uid="uid://hae05rww5j4" path="res://assets/animations/Farelie Bedroom Scene Demo/farelie sleep b.png" id="3_dxiei"]
|
||||
[ext_resource type="Texture2D" uid="uid://c3gqheh1085lk" path="res://assets/animations/Morgan Bathroom Scene Demo/morgan bathroom 2.png" id="3_ntfd7"]
|
||||
[ext_resource type="Texture2D" uid="uid://d2xryobqp46dc" path="res://assets/animations/Farelie Bedroom Scene Demo/farelie up.png" id="4_50pgx"]
|
||||
[ext_resource type="Texture2D" uid="uid://ch3pu6xrgvpg5" path="res://assets/animations/Farelie Bedroom Scene Demo/light off.png" id="4_bk7xj"]
|
||||
[ext_resource type="Texture2D" uid="uid://clco8immv254w" path="res://assets/animations/Morgan Bedroom Scene Demo/Morgan_bleeding_background_final.png" id="5_jw064"]
|
||||
[ext_resource type="Texture2D" uid="uid://crcj8ih1kxx8m" path="res://assets/animations/Farelie Bedroom Scene Demo/bmorg_neutral.png" id="5_qefwc"]
|
||||
[ext_resource type="Texture2D" uid="uid://q6fqvydbbs7b" path="res://assets/animations/Farelie Bedroom Scene Demo/farelie lamp.png" id="6_q0jqv"]
|
||||
[ext_resource type="Texture2D" uid="uid://bhusg83pgk8vk" path="res://assets/animations/Farelie Couch Scene Demo/BandageMorganWalk/bandage morgan walk left 1.png" id="10_ikovo"]
|
||||
[ext_resource type="Texture2D" uid="uid://cfdqprgeqnkxm" path="res://assets/animations/Farelie Couch Scene Demo/BandageMorganWalk/bandage morgan walk left 2.png" id="11_hbqtw"]
|
||||
[ext_resource type="Texture2D" uid="uid://cdkmwgpgx6n8" path="res://assets/animations/Farelie Couch Scene Demo/BandageMorganWalk/bandage morgan walk left 3.png" id="12_veqjf"]
|
||||
[ext_resource type="Texture2D" uid="uid://hmq11sy3ueld" path="res://assets/animations/Farelie Couch Scene Demo/BandageMorganWalk/bandage morgan walk left 4.png" id="13_1ii44"]
|
||||
[ext_resource type="AudioStream" uid="uid://c1ubo3ehnbq4u" path="res://assets/audio/Teaser/footsteps/carpet/1.ogg" id="13_f2t3s"]
|
||||
[ext_resource type="AudioStream" uid="uid://gqqkuyrpspjs" path="res://assets/audio/Teaser/footsteps/carpet/2.ogg" id="14_1t4vr"]
|
||||
[ext_resource type="AudioStream" uid="uid://by0v4dbdjcuv4" path="res://assets/audio/Teaser/footsteps/carpet/3.ogg" id="15_i72eo"]
|
||||
[ext_resource type="AudioStream" uid="uid://b61xys0vhhlv4" path="res://assets/audio/Teaser/footsteps/carpet/4.ogg" id="16_n86vy"]
|
||||
[ext_resource type="Texture2D" uid="uid://wvp6hrr3cfy4" path="res://assets/animations/Farelie Bedroom Scene Demo/light on a.png" id="17_8klqq"]
|
||||
[ext_resource type="AudioStream" uid="uid://bglirrx16sho8" path="res://assets/audio/Teaser/footsteps/carpet/5.ogg" id="17_h2xkq"]
|
||||
[ext_resource type="Texture2D" uid="uid://dq0rwyqtq14pi" path="res://assets/animations/Farelie Bedroom Scene Demo/light on.png" id="18_nv20x"]
|
||||
[ext_resource type="AudioStream" uid="uid://blhws6e67v6dh" path="res://assets/audio/Teaser/footsteps/carpet/6.ogg" id="18_w5wtt"]
|
||||
[ext_resource type="Texture2D" uid="uid://o0hagwyhd773" path="res://assets/animations/Farelie Bedroom Scene Demo/morgan_eye_glow_add_glow_white.png" id="19_xaade"]
|
||||
[ext_resource type="Texture2D" uid="uid://b0e4aci7ta8mw" path="res://assets/animations/Farelie Bedroom Scene Demo/light on layer.png" id="20_smbd4"]
|
||||
[ext_resource type="Texture2D" uid="uid://cisdyebf0hphm" path="res://assets/animations/Farelie Bedroom Scene Demo/morgan shave sitting.png" id="23_i400t"]
|
||||
[ext_resource type="Texture2D" uid="uid://cn57gvdjtb8w2" path="res://assets/animations/Farelie Bedroom Scene Demo/morgan shave sitting antenna.png" id="23_mx3kq"]
|
||||
[ext_resource type="Texture2D" uid="uid://dco2mrjv5y510" path="res://assets/animations/Morgan Bedroom Scene Demo/Farelie Haircut/crate.png" id="25_3utxh"]
|
||||
[ext_resource type="Texture2D" uid="uid://bykjdhgfag0t" path="res://assets/animations/Morgan Bedroom Scene Demo/Farelie Haircut/f_shave_blush.png" id="26_tkape"]
|
||||
[ext_resource type="Texture2D" uid="uid://d34cmay5iyclu" path="res://assets/animations/Morgan Bedroom Scene Demo/Farelie Haircut/f_shave_concern.png" id="27_sa6tj"]
|
||||
[ext_resource type="Texture2D" uid="uid://d2hxim85mnm8d" path="res://assets/animations/Morgan Bedroom Scene Demo/Farelie Haircut/f_shave.png" id="28_1lbqe"]
|
||||
[ext_resource type="Texture2D" uid="uid://bpd0v2qyl84di" path="res://assets/animations/Morgan Bedroom Scene Demo/Farelie Haircut/farelie_mwah.png" id="29_6ljr3"]
|
||||
[ext_resource type="AudioStream" uid="uid://ddtxfnpnci8li" path="res://assets/audio/Teaser/foley/lightswitch.ogg" id="30_bsa4p"]
|
||||
[ext_resource type="AudioStream" uid="uid://bhqy615ka858s" path="res://assets/audio/Teaser/foley/clothing_rustle.ogg" id="37_vx3j2"]
|
||||
[ext_resource type="AudioStream" uid="uid://ddsubbbp6tuag" path="res://assets/audio/Teaser/ambience/apartment_inside.ogg" id="38_oijrd"]
|
||||
[ext_resource type="AudioStream" uid="uid://dagyawkkfifhw" path="res://assets/audio/Teaser/ambience/hallow.ogg" id="39_k31ht"]
|
||||
|
||||
[sub_resource type="SpriteFrames" id="SpriteFrames_yokyd"]
|
||||
animations = [{
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("5_qefwc")
|
||||
}],
|
||||
"loop": false,
|
||||
"name": &"Standing",
|
||||
"speed": 5.0
|
||||
}, {
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("10_ikovo")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("11_hbqtw")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("12_veqjf")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("13_1ii44")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"Walking",
|
||||
"speed": 5.0
|
||||
}]
|
||||
|
||||
[sub_resource type="SpriteFrames" id="SpriteFrames_mvbhx"]
|
||||
animations = [{
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("3_dxiei")
|
||||
}],
|
||||
"loop": false,
|
||||
"name": &"Awake",
|
||||
"speed": 5.0
|
||||
}, {
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("4_50pgx")
|
||||
}],
|
||||
"loop": false,
|
||||
"name": &"Sit",
|
||||
"speed": 5.0
|
||||
}, {
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("3_7r2ew")
|
||||
}],
|
||||
"loop": false,
|
||||
"name": &"Sleeping",
|
||||
"speed": 5.0
|
||||
}, {
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("6_q0jqv")
|
||||
}],
|
||||
"loop": false,
|
||||
"name": &"TurnOnLight",
|
||||
"speed": 5.0
|
||||
}]
|
||||
|
||||
[sub_resource type="SpriteFrames" id="SpriteFrames_b6q3u"]
|
||||
animations = [{
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("17_8klqq")
|
||||
}],
|
||||
"loop": false,
|
||||
"name": &"FlickLightOn",
|
||||
"speed": 5.0
|
||||
}, {
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("18_nv20x")
|
||||
}],
|
||||
"loop": false,
|
||||
"name": &"SitUp",
|
||||
"speed": 5.0
|
||||
}]
|
||||
|
||||
[sub_resource type="SpriteFrames" id="SpriteFrames_hh1kk"]
|
||||
animations = [{
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("23_mx3kq")
|
||||
}],
|
||||
"loop": false,
|
||||
"name": &"GrabAntenna",
|
||||
"speed": 5.0
|
||||
}, {
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("23_i400t")
|
||||
}],
|
||||
"loop": false,
|
||||
"name": &"Neutral",
|
||||
"speed": 5.0
|
||||
}]
|
||||
|
||||
[sub_resource type="SpriteFrames" id="SpriteFrames_25lg8"]
|
||||
animations = [{
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("26_tkape")
|
||||
}],
|
||||
"loop": false,
|
||||
"name": &"Blush",
|
||||
"speed": 5.0
|
||||
}, {
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("27_sa6tj")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"Concern",
|
||||
"speed": 5.0
|
||||
}, {
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("28_1lbqe")
|
||||
}],
|
||||
"loop": false,
|
||||
"name": &"Neutral",
|
||||
"speed": 5.0
|
||||
}, {
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("29_6ljr3")
|
||||
}],
|
||||
"loop": false,
|
||||
"name": &"Smooch",
|
||||
"speed": 5.0
|
||||
}]
|
||||
|
||||
[sub_resource type="Animation" id="Animation_5w6l5"]
|
||||
length = 0.001
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("SpriteHolder/FarelieBedroom/LightsOff/Background/BMorganAnimation:position")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector2(565, 33)]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("SpriteHolder/FarelieBedroom/LightsOff/Background/BMorganAnimation:animation")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [&"Walking"]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("SpriteHolder/FarelieBedroom/LightsOff/FarelieAnimation:animation")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [&"Sleeping"]
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("SpriteHolder/FarelieBedroom/LightsOff:visible")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [true]
|
||||
}
|
||||
tracks/4/type = "value"
|
||||
tracks/4/imported = false
|
||||
tracks/4/enabled = true
|
||||
tracks/4/path = NodePath("SpriteHolder/FarelieBedroom/LightsOn:visible")
|
||||
tracks/4/interp = 1
|
||||
tracks/4/loop_wrap = true
|
||||
tracks/4/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/5/type = "value"
|
||||
tracks/5/imported = false
|
||||
tracks/5/enabled = true
|
||||
tracks/5/path = NodePath("SpriteHolder/FarelieBedroom/LightsOn/FarelieBGAnimation:animation")
|
||||
tracks/5/interp = 1
|
||||
tracks/5/loop_wrap = true
|
||||
tracks/5/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [&"FlickLightOn"]
|
||||
}
|
||||
tracks/6/type = "value"
|
||||
tracks/6/imported = false
|
||||
tracks/6/enabled = true
|
||||
tracks/6/path = NodePath("LightSwitchSFX:playing")
|
||||
tracks/6/interp = 1
|
||||
tracks/6/loop_wrap = true
|
||||
tracks/6/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/7/type = "value"
|
||||
tracks/7/imported = false
|
||||
tracks/7/enabled = true
|
||||
tracks/7/path = NodePath(".:playFootsteps")
|
||||
tracks/7/interp = 1
|
||||
tracks/7/loop_wrap = true
|
||||
tracks/7/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/8/type = "value"
|
||||
tracks/8/imported = false
|
||||
tracks/8/enabled = true
|
||||
tracks/8/path = NodePath("BedRustleSFX:playing")
|
||||
tracks/8/interp = 1
|
||||
tracks/8/loop_wrap = true
|
||||
tracks/8/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/9/type = "value"
|
||||
tracks/9/imported = false
|
||||
tracks/9/enabled = true
|
||||
tracks/9/path = NodePath("ApartmentAmbience:playing")
|
||||
tracks/9/interp = 1
|
||||
tracks/9/loop_wrap = true
|
||||
tracks/9/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/10/type = "value"
|
||||
tracks/10/imported = false
|
||||
tracks/10/enabled = true
|
||||
tracks/10/path = NodePath("ApartmentAmbience:volume_db")
|
||||
tracks/10/interp = 1
|
||||
tracks/10/loop_wrap = true
|
||||
tracks/10/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [-6.265]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_rp2i1"]
|
||||
resource_name = "farelieBedroom"
|
||||
length = 8.0
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("SpriteHolder/FarelieBedroom/LightsOff/Background/BMorganAnimation:position")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 1.5, 4),
|
||||
"transitions": PackedFloat32Array(1, 0.707107, 1),
|
||||
"update": 0,
|
||||
"values": [Vector2(565, 33), Vector2(565, 33), Vector2(56, 33)]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("SpriteHolder/FarelieBedroom/LightsOff/Background/BMorganAnimation:animation")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0, 4),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 1,
|
||||
"values": [&"Walking", &"Standing"]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("SpriteHolder/FarelieBedroom/LightsOff/FarelieAnimation:animation")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0, 1, 5.6),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 1,
|
||||
"values": [&"Sleeping", &"Awake", &"TurnOnLight"]
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("SpriteHolder/FarelieBedroom/LightsOff:visible")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"times": PackedFloat32Array(0, 6.1),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 1,
|
||||
"values": [true, false]
|
||||
}
|
||||
tracks/4/type = "value"
|
||||
tracks/4/imported = false
|
||||
tracks/4/enabled = true
|
||||
tracks/4/path = NodePath("SpriteHolder/FarelieBedroom/LightsOn:visible")
|
||||
tracks/4/interp = 1
|
||||
tracks/4/loop_wrap = true
|
||||
tracks/4/keys = {
|
||||
"times": PackedFloat32Array(0, 6.1),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 1,
|
||||
"values": [false, true]
|
||||
}
|
||||
tracks/5/type = "value"
|
||||
tracks/5/imported = false
|
||||
tracks/5/enabled = true
|
||||
tracks/5/path = NodePath("SpriteHolder/FarelieBedroom/LightsOn/FarelieBGAnimation:animation")
|
||||
tracks/5/interp = 1
|
||||
tracks/5/loop_wrap = true
|
||||
tracks/5/keys = {
|
||||
"times": PackedFloat32Array(0, 7.6),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 1,
|
||||
"values": [&"FlickLightOn", &"SitUp"]
|
||||
}
|
||||
tracks/6/type = "value"
|
||||
tracks/6/imported = false
|
||||
tracks/6/enabled = true
|
||||
tracks/6/path = NodePath("LightSwitchSFX:playing")
|
||||
tracks/6/interp = 1
|
||||
tracks/6/loop_wrap = true
|
||||
tracks/6/keys = {
|
||||
"times": PackedFloat32Array(0, 6.1),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 1,
|
||||
"values": [false, true]
|
||||
}
|
||||
tracks/7/type = "value"
|
||||
tracks/7/imported = false
|
||||
tracks/7/enabled = true
|
||||
tracks/7/path = NodePath(".:playFootsteps")
|
||||
tracks/7/interp = 1
|
||||
tracks/7/loop_wrap = true
|
||||
tracks/7/keys = {
|
||||
"times": PackedFloat32Array(0, 1.5, 4),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 1,
|
||||
"values": [false, true, false]
|
||||
}
|
||||
tracks/8/type = "value"
|
||||
tracks/8/imported = false
|
||||
tracks/8/enabled = true
|
||||
tracks/8/path = NodePath("BedRustleSFX:playing")
|
||||
tracks/8/interp = 1
|
||||
tracks/8/loop_wrap = true
|
||||
tracks/8/keys = {
|
||||
"times": PackedFloat32Array(7.55),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [true]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_pa8mx"]
|
||||
resource_name = "FadeInAmbience"
|
||||
length = 0.5
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("ApartmentAmbience:playing")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [true]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("ApartmentAmbience:volume_db")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0, 0.5),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [-60.284, -13.761]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_ofaui"]
|
||||
resource_name = "FadeOutMorganRoom"
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("ApartmentAmbience:volume_db")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 1),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [-13.761, -80.0]
|
||||
}
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_ae8gp"]
|
||||
_data = {
|
||||
&"FadeInAmbience": SubResource("Animation_pa8mx"),
|
||||
&"FadeOutMorganRoom": SubResource("Animation_ofaui"),
|
||||
&"RESET": SubResource("Animation_5w6l5"),
|
||||
&"farelieBedroom": SubResource("Animation_rp2i1")
|
||||
}
|
||||
|
||||
[node name="MorganHaircutScene" type="Control" groups=["cutscene"]]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1_0wmdc")
|
||||
nextScene_ = ExtResource("2_y8n3l")
|
||||
|
||||
[node name="ColorRect" type="ColorRect" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
color = Color(0, 0, 0, 1)
|
||||
|
||||
[node name="SpriteHolder" type="Node2D" parent="."]
|
||||
position = Vector2(960, 540)
|
||||
|
||||
[node name="MorganBathroom" type="Node2D" parent="SpriteHolder"]
|
||||
|
||||
[node name="Background" type="Sprite2D" parent="SpriteHolder/MorganBathroom"]
|
||||
texture = ExtResource("1_mg6kt")
|
||||
|
||||
[node name="Reflection" type="Sprite2D" parent="SpriteHolder/MorganBathroom"]
|
||||
texture = ExtResource("2_p5qiu")
|
||||
|
||||
[node name="BMorgan" type="Sprite2D" parent="SpriteHolder/MorganBathroom"]
|
||||
texture = ExtResource("3_ntfd7")
|
||||
|
||||
[node name="FarelieBedroom" type="Node2D" parent="SpriteHolder"]
|
||||
visible = false
|
||||
|
||||
[node name="LightsOff" type="Node2D" parent="SpriteHolder/FarelieBedroom"]
|
||||
|
||||
[node name="Background" type="Sprite2D" parent="SpriteHolder/FarelieBedroom/LightsOff"]
|
||||
clip_children = 2
|
||||
texture = ExtResource("1_1w3nr")
|
||||
|
||||
[node name="Foreground" type="Sprite2D" parent="SpriteHolder/FarelieBedroom/LightsOff/Background"]
|
||||
texture = ExtResource("2_x04g7")
|
||||
|
||||
[node name="BMorganAnimation" type="AnimatedSprite2D" parent="SpriteHolder/FarelieBedroom/LightsOff/Background"]
|
||||
position = Vector2(565, 33)
|
||||
sprite_frames = SubResource("SpriteFrames_yokyd")
|
||||
animation = &"Walking"
|
||||
autoplay = "Walking"
|
||||
flip_h = true
|
||||
|
||||
[node name="SoundsContainer" type="Node2D" parent="SpriteHolder/FarelieBedroom/LightsOff/Background/BMorganAnimation"]
|
||||
position = Vector2(-565, -33)
|
||||
|
||||
[node name="StepSFX1" type="AudioStreamPlayer2D" parent="SpriteHolder/FarelieBedroom/LightsOff/Background/BMorganAnimation/SoundsContainer"]
|
||||
stream = ExtResource("13_f2t3s")
|
||||
|
||||
[node name="StepSFX2" type="AudioStreamPlayer2D" parent="SpriteHolder/FarelieBedroom/LightsOff/Background/BMorganAnimation/SoundsContainer"]
|
||||
stream = ExtResource("14_1t4vr")
|
||||
|
||||
[node name="StepSFX3" type="AudioStreamPlayer2D" parent="SpriteHolder/FarelieBedroom/LightsOff/Background/BMorganAnimation/SoundsContainer"]
|
||||
stream = ExtResource("15_i72eo")
|
||||
|
||||
[node name="StepSFX4" type="AudioStreamPlayer2D" parent="SpriteHolder/FarelieBedroom/LightsOff/Background/BMorganAnimation/SoundsContainer"]
|
||||
stream = ExtResource("16_n86vy")
|
||||
|
||||
[node name="StepSFX5" type="AudioStreamPlayer2D" parent="SpriteHolder/FarelieBedroom/LightsOff/Background/BMorganAnimation/SoundsContainer"]
|
||||
stream = ExtResource("17_h2xkq")
|
||||
|
||||
[node name="StepSFX6" type="AudioStreamPlayer2D" parent="SpriteHolder/FarelieBedroom/LightsOff/Background/BMorganAnimation/SoundsContainer"]
|
||||
stream = ExtResource("18_w5wtt")
|
||||
|
||||
[node name="FarelieAnimation" type="AnimatedSprite2D" parent="SpriteHolder/FarelieBedroom/LightsOff"]
|
||||
sprite_frames = SubResource("SpriteFrames_mvbhx")
|
||||
animation = &"Sleeping"
|
||||
autoplay = "Sleeping"
|
||||
|
||||
[node name="LightsOffOverlay" type="PointLight2D" parent="SpriteHolder/FarelieBedroom/LightsOff"]
|
||||
blend_mode = 2
|
||||
texture = ExtResource("4_bk7xj")
|
||||
|
||||
[node name="LightsOn" type="Node2D" parent="SpriteHolder/FarelieBedroom"]
|
||||
visible = false
|
||||
|
||||
[node name="FarelieBGAnimation" type="AnimatedSprite2D" parent="SpriteHolder/FarelieBedroom/LightsOn"]
|
||||
light_mask = 0
|
||||
sprite_frames = SubResource("SpriteFrames_b6q3u")
|
||||
animation = &"FlickLightOn"
|
||||
autoplay = "FlickLightOn"
|
||||
|
||||
[node name="BMorgan" type="Sprite2D" parent="SpriteHolder/FarelieBedroom/LightsOn"]
|
||||
position = Vector2(56, 33)
|
||||
texture = ExtResource("5_qefwc")
|
||||
flip_h = true
|
||||
|
||||
[node name="EyeGlow" type="PointLight2D" parent="SpriteHolder/FarelieBedroom/LightsOn/BMorgan"]
|
||||
top_level = true
|
||||
position = Vector2(1015, 581)
|
||||
color = Color(0.941176, 0.905882, 0.2, 1)
|
||||
energy = 10.0
|
||||
texture = ExtResource("19_xaade")
|
||||
|
||||
[node name="LightGlow" type="PointLight2D" parent="SpriteHolder/FarelieBedroom/LightsOn"]
|
||||
blend_mode = 2
|
||||
texture = ExtResource("20_smbd4")
|
||||
|
||||
[node name="MorgBedroomHaircut" type="Node2D" parent="SpriteHolder"]
|
||||
visible = false
|
||||
|
||||
[node name="bg" type="Sprite2D" parent="SpriteHolder/MorgBedroomHaircut"]
|
||||
clip_children = 2
|
||||
texture = ExtResource("5_jw064")
|
||||
|
||||
[node name="MorganAnimation" type="AnimatedSprite2D" parent="SpriteHolder/MorgBedroomHaircut/bg"]
|
||||
z_index = 2
|
||||
sprite_frames = SubResource("SpriteFrames_hh1kk")
|
||||
animation = &"Neutral"
|
||||
autoplay = "Neutral"
|
||||
|
||||
[node name="CrateSprite" type="Sprite2D" parent="SpriteHolder/MorgBedroomHaircut/bg"]
|
||||
z_index = 1
|
||||
texture = ExtResource("25_3utxh")
|
||||
|
||||
[node name="FarelieAnimation" type="AnimatedSprite2D" parent="SpriteHolder/MorgBedroomHaircut/bg"]
|
||||
sprite_frames = SubResource("SpriteFrames_25lg8")
|
||||
animation = &"Neutral"
|
||||
autoplay = "Neutral"
|
||||
|
||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
||||
libraries = {
|
||||
&"": SubResource("AnimationLibrary_ae8gp")
|
||||
}
|
||||
|
||||
[node name="LightSwitchSFX" type="AudioStreamPlayer" parent="."]
|
||||
stream = ExtResource("30_bsa4p")
|
||||
volume_db = -5.0
|
||||
|
||||
[node name="BedRustleSFX" type="AudioStreamPlayer" parent="."]
|
||||
stream = ExtResource("37_vx3j2")
|
||||
|
||||
[node name="ApartmentAmbience" type="AudioStreamPlayer" parent="."]
|
||||
stream = ExtResource("38_oijrd")
|
||||
volume_db = -6.265
|
||||
|
||||
[node name="SpookyAmbience" type="AudioStreamPlayer" parent="."]
|
||||
stream = ExtResource("39_k31ht")
|
||||
volume_db = -5.012
|
||||
|
||||
[connection signal="frame_changed" from="SpriteHolder/FarelieBedroom/LightsOff/Background/BMorganAnimation" to="." method="_on_b_morgan_animation_frame_changed"]
|
||||
[connection signal="animation_finished" from="AnimationPlayer" to="." method="_on_animation_player_animation_finished"]
|
||||
@@ -0,0 +1,22 @@
|
||||
extends Control
|
||||
|
||||
|
||||
##Delay to add to the scene before automatically starting the animation
|
||||
@export var startDelay := 4.0
|
||||
##Delay to add at the end of the animation before fading to black
|
||||
@export var endDelay := 1.0
|
||||
##Next scene to load once animation finishes
|
||||
@export var nextScene_ : PackedScene
|
||||
|
||||
var dialog_unwrapping = "demo_unwrapping"
|
||||
|
||||
func _ready() -> void:
|
||||
await get_tree().create_timer(startDelay).timeout
|
||||
TeaserMusicManager.playMusic(TeaserMusicManager.apartmentMusic)
|
||||
DialogManager.start_cutscene_dialog(dialog_unwrapping)
|
||||
|
||||
func _on_dialog_ended() -> void:
|
||||
print("Dialog end!")
|
||||
await get_tree().create_timer(endDelay).timeout
|
||||
TeaserMusicManager.stopMusic()
|
||||
SceneManager.load_raw_packedScene(nextScene_, true, 0.25, 0.5, 0.25, 3.0)
|
||||
@@ -0,0 +1 @@
|
||||
uid://ogvhjunvd4fp
|
||||
@@ -0,0 +1,336 @@
|
||||
[gd_scene load_steps=21 format=3 uid="uid://k7o5gfolp0fh"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://ogvhjunvd4fp" path="res://Cutscenes/morgan_unwrapping_scene.gd" id="1_5iqhf"]
|
||||
[ext_resource type="Texture2D" uid="uid://twfgsn6v7hup" path="res://assets/animations/Farelie Couch Scene Demo/morgans apt.png" id="1_i6wk3"]
|
||||
[ext_resource type="Texture2D" uid="uid://drfdkcrradqtt" path="res://assets/animations/Farelie Couch Scene Demo/morgans apt tv.png" id="2_5h7cl"]
|
||||
[ext_resource type="PackedScene" uid="uid://qval4nxnkoyi" path="res://Cutscenes/restaurant_scene.tscn" id="2_ywf7n"]
|
||||
[ext_resource type="Texture2D" uid="uid://deqtpkrqhuvxc" path="res://assets/animations/Farelie Couch Scene Demo/farelie jammie kiss a.png" id="3_nrcor"]
|
||||
[ext_resource type="Texture2D" uid="uid://beluhrehlmjhk" path="res://assets/animations/Farelie Couch Scene Demo/morgan farelie hug.png" id="3_v4mmi"]
|
||||
[ext_resource type="Texture2D" uid="uid://di1lpegxa4ydr" path="res://assets/animations/Farelie Couch Scene Demo/farelie jammie kiss b.png" id="4_ynaoy"]
|
||||
[ext_resource type="Texture2D" uid="uid://curr3vn54fbnh" path="res://assets/animations/Farelie Couch Scene Demo/farelie jammie sit c.png" id="5_u0g1x"]
|
||||
[ext_resource type="Texture2D" uid="uid://054ur6d0828s" path="res://assets/animations/Farelie Couch Scene Demo/bmorgan sitting c.png" id="6_6ajvi"]
|
||||
[ext_resource type="Texture2D" uid="uid://w6wrh6h7mm8o" path="res://assets/animations/Farelie Couch Scene Demo/bmorgan unbandaged.png" id="7_inaae"]
|
||||
[ext_resource type="Texture2D" uid="uid://ltj6oabvk2qp" path="res://assets/animations/Farelie Couch Scene Demo/bmorgan unbandaged alt.png" id="8_0glxe"]
|
||||
[ext_resource type="Texture2D" uid="uid://cvjs3wny6bjn7" path="res://assets/animations/Farelie Couch Scene Demo/couch_overlay.png" id="12_aupc0"]
|
||||
|
||||
[sub_resource type="SpriteFrames" id="SpriteFrames_nm2sv"]
|
||||
animations = [{
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("3_nrcor")
|
||||
}],
|
||||
"loop": false,
|
||||
"name": &"Crying",
|
||||
"speed": 5.0
|
||||
}, {
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("4_ynaoy")
|
||||
}],
|
||||
"loop": false,
|
||||
"name": &"Kissing",
|
||||
"speed": 5.0
|
||||
}, {
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("5_u0g1x")
|
||||
}],
|
||||
"loop": false,
|
||||
"name": &"Neutral",
|
||||
"speed": 5.0
|
||||
}]
|
||||
|
||||
[sub_resource type="SpriteFrames" id="SpriteFrames_7lkmm"]
|
||||
animations = [{
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("6_6ajvi")
|
||||
}],
|
||||
"loop": false,
|
||||
"name": &"Neutral",
|
||||
"speed": 5.0
|
||||
}, {
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("7_inaae")
|
||||
}],
|
||||
"loop": false,
|
||||
"name": &"UnbandagedDown",
|
||||
"speed": 5.0
|
||||
}, {
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("8_0glxe")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"UnbandagedLook",
|
||||
"speed": 5.0
|
||||
}]
|
||||
|
||||
[sub_resource type="Animation" id="Animation_bkp7e"]
|
||||
resource_name = "FadeIn"
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("FadeOverlay:modulate")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 1),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_fb0w3"]
|
||||
resource_name = "FadeOutSetup"
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("FadeOverlay:modulate")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 1),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0)]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("SpriteHolder/LivingroomBG/FarelieSoloAnimation:animation")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [&"Crying"]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("SpriteHolder/LivingroomBG/MorganSoloAnimation:animation")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [&"UnbandagedDown"]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_d8pnn"]
|
||||
resource_name = "Hug"
|
||||
length = 0.1
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("SpriteHolder/LivingroomBG/HugSprite:visible")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [true]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("SpriteHolder/LivingroomBG/MorganSoloAnimation:visible")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("SpriteHolder/LivingroomBG/FarelieSoloAnimation:visible")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_4gydt"]
|
||||
resource_name = "Kiss"
|
||||
length = 4.0
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("SpriteHolder/LivingroomBG/FarelieSoloAnimation:animation")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 2.3, 3.1),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 1,
|
||||
"values": [&"Crying", &"Kissing", &"Crying"]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("SpriteHolder/LivingroomBG/MorganSoloAnimation:animation")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0, 1.3),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 1,
|
||||
"values": [&"UnbandagedDown", &"UnbandagedLook"]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_gen51"]
|
||||
length = 0.001
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("FadeOverlay:modulate")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Color(1, 1, 1, 0)]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("SpriteHolder/LivingroomBG/FarelieSoloAnimation:animation")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [&"Neutral"]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("SpriteHolder/LivingroomBG/MorganSoloAnimation:animation")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [&"Neutral"]
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("SpriteHolder/LivingroomBG/FarelieSoloAnimation:visible")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [true]
|
||||
}
|
||||
tracks/4/type = "value"
|
||||
tracks/4/imported = false
|
||||
tracks/4/enabled = true
|
||||
tracks/4/path = NodePath("SpriteHolder/LivingroomBG/MorganSoloAnimation:visible")
|
||||
tracks/4/interp = 1
|
||||
tracks/4/loop_wrap = true
|
||||
tracks/4/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [true]
|
||||
}
|
||||
tracks/5/type = "value"
|
||||
tracks/5/imported = false
|
||||
tracks/5/enabled = true
|
||||
tracks/5/path = NodePath("SpriteHolder/LivingroomBG/HugSprite:visible")
|
||||
tracks/5/interp = 1
|
||||
tracks/5/loop_wrap = true
|
||||
tracks/5/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_cokqq"]
|
||||
_data = {
|
||||
&"FadeIn": SubResource("Animation_bkp7e"),
|
||||
&"FadeOutSetup": SubResource("Animation_fb0w3"),
|
||||
&"Hug": SubResource("Animation_d8pnn"),
|
||||
&"Kiss": SubResource("Animation_4gydt"),
|
||||
&"RESET": SubResource("Animation_gen51")
|
||||
}
|
||||
|
||||
[node name="MorganUnwrappingScene" type="Control" groups=["cutscene"]]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1_5iqhf")
|
||||
nextScene_ = ExtResource("2_ywf7n")
|
||||
|
||||
[node name="ColorRect" type="ColorRect" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
color = Color(0, 0, 0, 1)
|
||||
|
||||
[node name="SpriteHolder" type="Node2D" parent="."]
|
||||
position = Vector2(960, 540)
|
||||
|
||||
[node name="LivingroomBG" type="Sprite2D" parent="SpriteHolder"]
|
||||
clip_children = 2
|
||||
texture = ExtResource("1_i6wk3")
|
||||
|
||||
[node name="TVSprite" type="Sprite2D" parent="SpriteHolder/LivingroomBG"]
|
||||
texture = ExtResource("2_5h7cl")
|
||||
|
||||
[node name="FarelieSoloAnimation" type="AnimatedSprite2D" parent="SpriteHolder/LivingroomBG"]
|
||||
sprite_frames = SubResource("SpriteFrames_nm2sv")
|
||||
animation = &"Neutral"
|
||||
autoplay = "Neutral"
|
||||
|
||||
[node name="MorganSoloAnimation" type="AnimatedSprite2D" parent="SpriteHolder/LivingroomBG"]
|
||||
sprite_frames = SubResource("SpriteFrames_7lkmm")
|
||||
animation = &"Neutral"
|
||||
autoplay = "Neutral"
|
||||
|
||||
[node name="HugSprite" type="Sprite2D" parent="SpriteHolder/LivingroomBG"]
|
||||
visible = false
|
||||
texture = ExtResource("3_v4mmi")
|
||||
|
||||
[node name="CouchOverlay" type="Sprite2D" parent="SpriteHolder/LivingroomBG"]
|
||||
texture = ExtResource("12_aupc0")
|
||||
|
||||
[node name="FadeOverlay" type="ColorRect" parent="."]
|
||||
modulate = Color(1, 1, 1, 0)
|
||||
light_mask = 0
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
color = Color(0, 0, 0, 1)
|
||||
|
||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
||||
libraries = {
|
||||
&"": SubResource("AnimationLibrary_cokqq")
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
extends Control
|
||||
|
||||
@onready var animation_player: AnimationPlayer = $AnimationPlayer
|
||||
@onready var farelie_animation: AnimatedSprite2D = $SpriteHolder/FarelieAnimation
|
||||
@onready var farelie_sounds_container: Node2D = $SpriteHolder/FarelieAnimation/SoundsContainer
|
||||
|
||||
##Delay to add to the scene before automatically starting the animation
|
||||
@export var startDelay := 3.0
|
||||
##Delay to add at the end of the animation before fading to black
|
||||
@export var endDelay := 1.0
|
||||
##Next scene to load once animation finishes
|
||||
@export var nextScene_ : PackedScene
|
||||
|
||||
##Tracks when the footstep sfx should be played. Controlled by AnimationPlayer.
|
||||
##Must be exported var so AnimationPlayer can modify it.
|
||||
@export var playFootsteps := false
|
||||
|
||||
func _ready() -> void:
|
||||
await get_tree().create_timer(1.0).timeout
|
||||
animation_player.play("AptAmbienceFadeIn")
|
||||
await get_tree().create_timer(startDelay).timeout
|
||||
#TODO: update this to the correct animation whenever that's finalized
|
||||
animation_player.play("Panning_3")
|
||||
|
||||
|
||||
func _on_animation_player_animation_finished(anim_name: StringName) -> void:
|
||||
if anim_name == "Panning_3":
|
||||
print("Animation finished!")
|
||||
await get_tree().create_timer(endDelay).timeout
|
||||
animation_player.play("AptAmbienceFadeOut")
|
||||
SceneManager.load_raw_packedScene(nextScene_, true, 0.25, 0.5, 0.25, 2.0)
|
||||
|
||||
func footstep_player(sprite_animation: AnimatedSprite2D, animation_player: AnimationPlayer, sounds_container: Node2D) -> void:
|
||||
if playFootsteps:
|
||||
if sprite_animation.get_frame() == 1 or sprite_animation.get_frame() == 3:
|
||||
var chosenStepSFX : AudioStreamPlayer2D = sounds_container.get_children()[randi() % sounds_container.get_children().size()]
|
||||
chosenStepSFX.play()
|
||||
|
||||
func _on_farelie_animation_frame_changed() -> void:
|
||||
footstep_player(farelie_animation, animation_player, farelie_sounds_container)
|
||||
@@ -0,0 +1 @@
|
||||
uid://qbucq32tn48j
|
||||
@@ -0,0 +1,809 @@
|
||||
[gd_scene load_steps=52 format=3 uid="uid://dvfye263gat8k"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://qbucq32tn48j" path="res://Cutscenes/outside_kids_scene.gd" id="1_g0h8g"]
|
||||
[ext_resource type="Texture2D" uid="uid://dtsyg0u2a14dn" path="res://assets/animations/Apartment Scene Demo/outside morgans apt.png" id="1_o63iy"]
|
||||
[ext_resource type="PackedScene" uid="uid://bjmgut8pfywp5" path="res://Cutscenes/farelie_couch_scene.tscn" id="2_mubto"]
|
||||
[ext_resource type="Texture2D" uid="uid://0nsk428537nk" path="res://assets/animations/Apartment Scene Demo/morgan door.png" id="2_qge2i"]
|
||||
[ext_resource type="Texture2D" uid="uid://bfas4wo3ouuun" path="res://assets/animations/Apartment Scene Demo/farelie_neutral_sprite.png" id="3_fvfcv"]
|
||||
[ext_resource type="Texture2D" uid="uid://bs2iqxjnjmd7w" path="res://assets/animations/Morgan Bedroom Scene Demo/walk/farelie_walk_side_0001.png" id="4_8ekuk"]
|
||||
[ext_resource type="Texture2D" uid="uid://cypg8v74segmr" path="res://assets/animations/Morgan Bedroom Scene Demo/walk/farelie_walk_side_0002.png" id="5_o1mde"]
|
||||
[ext_resource type="Texture2D" uid="uid://nsmekjaj4ktu" path="res://assets/animations/Morgan Bedroom Scene Demo/walk/farelie_walk_side_0003.png" id="6_0k0q1"]
|
||||
[ext_resource type="Texture2D" uid="uid://gxiuwsp7pbsh" path="res://assets/animations/Morgan Bedroom Scene Demo/walk/farelie_walk_side_0004.png" id="7_vtcl0"]
|
||||
[ext_resource type="Texture2D" uid="uid://b2q8mmsday7bc" path="res://assets/animations/Apartment Scene Demo/kids/lewis walk 1.png" id="9_grqbb"]
|
||||
[ext_resource type="Texture2D" uid="uid://cql3wh3ycsgjg" path="res://assets/animations/Apartment Scene Demo/multiply.png" id="9_nqkfm"]
|
||||
[ext_resource type="Texture2D" uid="uid://bw45v0njqri6g" path="res://assets/animations/Apartment Scene Demo/kids/lewis walk 2.png" id="10_2byes"]
|
||||
[ext_resource type="AudioStream" uid="uid://dhxdkweb2q123" path="res://assets/audio/Teaser/foley/door_close.ogg" id="10_4c32i"]
|
||||
[ext_resource type="Texture2D" uid="uid://cgihc2r6m76c7" path="res://assets/animations/Apartment Scene Demo/overlay.png" id="10_p1ko4"]
|
||||
[ext_resource type="AudioStream" uid="uid://ergdl7k7oxeu" path="res://assets/audio/Teaser/footsteps/concrete/1.ogg" id="11_bt3cp"]
|
||||
[ext_resource type="Texture2D" uid="uid://bpksecne1xq7b" path="res://assets/animations/Apartment Scene Demo/kids/lewis walk 1 alt.png" id="11_q3abo"]
|
||||
[ext_resource type="AudioStream" uid="uid://4hfgbatfbuls" path="res://assets/audio/Teaser/footsteps/concrete/2.ogg" id="12_6p88u"]
|
||||
[ext_resource type="Texture2D" uid="uid://cgdj5laqugrlm" path="res://assets/animations/Apartment Scene Demo/kids/lewis walk 2 alt.png" id="12_34dyr"]
|
||||
[ext_resource type="Texture2D" uid="uid://d2bmujnmqhqw0" path="res://assets/animations/Apartment Scene Demo/kids/lewis what da.png" id="13_4txuy"]
|
||||
[ext_resource type="AudioStream" uid="uid://rr2u4863avep" path="res://assets/audio/Teaser/footsteps/concrete/3.ogg" id="13_e47ca"]
|
||||
[ext_resource type="AudioStream" uid="uid://c4iidio56r7n8" path="res://assets/audio/Teaser/footsteps/concrete/4.ogg" id="14_24fk8"]
|
||||
[ext_resource type="Texture2D" uid="uid://c3vfaoa4abrgd" path="res://assets/animations/Apartment Scene Demo/kids/leila walk 1.png" id="14_eiuud"]
|
||||
[ext_resource type="Texture2D" uid="uid://capd8sd7nv2o7" path="res://assets/animations/Apartment Scene Demo/kids/leila walk 2.png" id="15_f7u5y"]
|
||||
[ext_resource type="AudioStream" uid="uid://c01hvq7vsv0t5" path="res://assets/audio/Teaser/footsteps/concrete/5.ogg" id="15_xoumh"]
|
||||
[ext_resource type="Texture2D" uid="uid://bx3c6guxu5ius" path="res://assets/animations/Apartment Scene Demo/kids/leila walk 1 alt.png" id="16_4p7y3"]
|
||||
[ext_resource type="AudioStream" uid="uid://b1gwdjm8iajom" path="res://assets/audio/Teaser/footsteps/concrete/6.ogg" id="16_kqulh"]
|
||||
[ext_resource type="Texture2D" uid="uid://bp76qelugkl5y" path="res://assets/animations/Apartment Scene Demo/kids/leila walk 2 alt.png" id="17_j2iyj"]
|
||||
[ext_resource type="Texture2D" uid="uid://cvqvccdarkipj" path="res://assets/animations/Apartment Scene Demo/kids/leila what da.png" id="18_f5uvh"]
|
||||
[ext_resource type="Texture2D" uid="uid://colxdh81be5cr" path="res://assets/animations/Apartment Scene Demo/kids/chester walk 1.png" id="19_nyclk"]
|
||||
[ext_resource type="Texture2D" uid="uid://b4sdkk0bah5fc" path="res://assets/animations/Apartment Scene Demo/kids/chester walk 2.png" id="20_q14ow"]
|
||||
[ext_resource type="Texture2D" uid="uid://bxv8h3ovb2dtl" path="res://assets/animations/Apartment Scene Demo/kids/chester walk 1 alt.png" id="21_yj51l"]
|
||||
[ext_resource type="Texture2D" uid="uid://b067cha1fus20" path="res://assets/animations/Apartment Scene Demo/kids/chester walk 2 alt.png" id="22_jmn4n"]
|
||||
[ext_resource type="Texture2D" uid="uid://baf3g5qjoay1f" path="res://assets/animations/Apartment Scene Demo/kids/chester what da.png" id="23_1c6u7"]
|
||||
[ext_resource type="Texture2D" uid="uid://bnsvqbst08iv4" path="res://assets/animations/Apartment Scene Demo/kids/gretchen walk 1.png" id="24_umiul"]
|
||||
[ext_resource type="Texture2D" uid="uid://xspm35hw6w80" path="res://assets/animations/Apartment Scene Demo/kids/gretchen walk 2.png" id="25_ygomu"]
|
||||
[ext_resource type="Texture2D" uid="uid://bnuheyxq628ml" path="res://assets/animations/Apartment Scene Demo/kids/gretchen walk 1 alt.png" id="26_y6rui"]
|
||||
[ext_resource type="Texture2D" uid="uid://c0qs6dm47bevt" path="res://assets/animations/Apartment Scene Demo/kids/gretchen walk 2 alt.png" id="27_jlii1"]
|
||||
[ext_resource type="Texture2D" uid="uid://ddk3iboarhy2r" path="res://assets/animations/Apartment Scene Demo/kids/gretchen what da.png" id="28_ja2he"]
|
||||
[ext_resource type="AudioStream" uid="uid://bldryvp638e7h" path="res://assets/audio/Teaser/ambience/apartment_outside.ogg" id="40_qr8uf"]
|
||||
|
||||
[sub_resource type="SpriteFrames" id="SpriteFrames_v2ttx"]
|
||||
animations = [{
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("3_fvfcv")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"Stand",
|
||||
"speed": 5.0
|
||||
}, {
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("4_8ekuk")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("5_o1mde")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("6_0k0q1")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("7_vtcl0")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"Walk",
|
||||
"speed": 5.0
|
||||
}]
|
||||
|
||||
[sub_resource type="SpriteFrames" id="SpriteFrames_uixl5"]
|
||||
animations = [{
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("9_grqbb")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("10_2byes")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"Walk",
|
||||
"speed": 3.0
|
||||
}, {
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("12_34dyr")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("11_q3abo")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"WalkStare",
|
||||
"speed": 3.0
|
||||
}, {
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("13_4txuy")
|
||||
}],
|
||||
"loop": false,
|
||||
"name": &"Whatda",
|
||||
"speed": 5.0
|
||||
}]
|
||||
|
||||
[sub_resource type="SpriteFrames" id="SpriteFrames_e2hj6"]
|
||||
animations = [{
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("14_eiuud")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("15_f7u5y")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"Walk",
|
||||
"speed": 3.0
|
||||
}, {
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("16_4p7y3")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("17_j2iyj")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"WalkStare",
|
||||
"speed": 3.0
|
||||
}, {
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("18_f5uvh")
|
||||
}],
|
||||
"loop": false,
|
||||
"name": &"Whatda",
|
||||
"speed": 5.0
|
||||
}]
|
||||
|
||||
[sub_resource type="SpriteFrames" id="SpriteFrames_hvs2a"]
|
||||
animations = [{
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("19_nyclk")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("20_q14ow")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"Walk",
|
||||
"speed": 3.0
|
||||
}, {
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("21_yj51l")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("22_jmn4n")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"WalkStare",
|
||||
"speed": 3.0
|
||||
}, {
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("23_1c6u7")
|
||||
}],
|
||||
"loop": false,
|
||||
"name": &"Whatda",
|
||||
"speed": 5.0
|
||||
}]
|
||||
|
||||
[sub_resource type="SpriteFrames" id="SpriteFrames_feu7n"]
|
||||
animations = [{
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("24_umiul")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("25_ygomu")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"Walk",
|
||||
"speed": 3.0
|
||||
}, {
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("26_y6rui")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("27_jlii1")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"WalkStare",
|
||||
"speed": 3.0
|
||||
}, {
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("28_ja2he")
|
||||
}],
|
||||
"loop": false,
|
||||
"name": &"Whatda",
|
||||
"speed": 5.0
|
||||
}]
|
||||
|
||||
[sub_resource type="Animation" id="Animation_wvu4y"]
|
||||
resource_name = "AptAmbienceFadeIn"
|
||||
length = 3.0
|
||||
step = 0.125
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("ApartmentAmbience:volume_db")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 3),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [-60.0, 0.0]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_aqumh"]
|
||||
resource_name = "AptAmbienceFadeOut"
|
||||
length = 5.0
|
||||
step = 0.125
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("ApartmentAmbience:volume_db")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 5),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [0.0, -60.0]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_0rf2x"]
|
||||
resource_name = "Panning"
|
||||
length = 20.0
|
||||
step = 0.125
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("SpriteHolder:position")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 5, 7, 15),
|
||||
"transitions": PackedFloat32Array(1, 1, 0.5, 1),
|
||||
"update": 0,
|
||||
"values": [Vector2(1412, 540), Vector2(1412, 540), Vector2(1230, 540), Vector2(508, 540)]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("SpriteHolder/FarelieAnimation:position")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0, 15, 17),
|
||||
"transitions": PackedFloat32Array(1, 0.5, 1),
|
||||
"update": 0,
|
||||
"values": [Vector2(-1571, 346), Vector2(-1571, 346), Vector2(658, 346)]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("SpriteHolder/FarelieAnimation:animation")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0, 17),
|
||||
"transitions": PackedFloat32Array(0, 1),
|
||||
"update": 1,
|
||||
"values": [&"Walk", &"Stand"]
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("SpriteHolder/MorganDoor:visible")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"times": PackedFloat32Array(0, 18),
|
||||
"transitions": PackedFloat32Array(0, 1),
|
||||
"update": 1,
|
||||
"values": [true, false]
|
||||
}
|
||||
tracks/4/type = "value"
|
||||
tracks/4/imported = false
|
||||
tracks/4/enabled = true
|
||||
tracks/4/path = NodePath("SpriteHolder/FarelieAnimation:visible")
|
||||
tracks/4/interp = 1
|
||||
tracks/4/loop_wrap = true
|
||||
tracks/4/keys = {
|
||||
"times": PackedFloat32Array(0, 18),
|
||||
"transitions": PackedFloat32Array(0, 1),
|
||||
"update": 1,
|
||||
"values": [true, false]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_a8xjk"]
|
||||
resource_name = "Panning_2"
|
||||
length = 20.0
|
||||
step = 0.125
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("SpriteHolder:position")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 5, 15),
|
||||
"transitions": PackedFloat32Array(1, 0.5, 1),
|
||||
"update": 0,
|
||||
"values": [Vector2(1412, 540), Vector2(1412, 540), Vector2(508, 540)]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("SpriteHolder/FarelieAnimation:position")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0, 16, 18),
|
||||
"transitions": PackedFloat32Array(1, 0.5, 1),
|
||||
"update": 0,
|
||||
"values": [Vector2(-1571, 346), Vector2(-1571, 346), Vector2(658, 346)]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("SpriteHolder/FarelieAnimation:animation")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0, 18),
|
||||
"transitions": PackedFloat32Array(0, 1),
|
||||
"update": 1,
|
||||
"values": [&"Walk", &"Stand"]
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("SpriteHolder/MorganDoor:visible")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"times": PackedFloat32Array(0, 19),
|
||||
"transitions": PackedFloat32Array(0, 1),
|
||||
"update": 1,
|
||||
"values": [true, false]
|
||||
}
|
||||
tracks/4/type = "value"
|
||||
tracks/4/imported = false
|
||||
tracks/4/enabled = true
|
||||
tracks/4/path = NodePath("SpriteHolder/FarelieAnimation:visible")
|
||||
tracks/4/interp = 1
|
||||
tracks/4/loop_wrap = true
|
||||
tracks/4/keys = {
|
||||
"times": PackedFloat32Array(0, 19),
|
||||
"transitions": PackedFloat32Array(0, 1),
|
||||
"update": 1,
|
||||
"values": [true, false]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_5q4j4"]
|
||||
resource_name = "Panning_3"
|
||||
length = 17.0
|
||||
step = 0.0625
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("SpriteHolder:position")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 4, 9),
|
||||
"transitions": PackedFloat32Array(1, 0.75, 1),
|
||||
"update": 0,
|
||||
"values": [Vector2(1412, 540), Vector2(1412, 540), Vector2(508, 540)]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("ChildrenSpriteHolder:position")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0, 4),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector2(-679, 888), Vector2(688, 888)]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("ChildrenSpriteHolder/Lewis:animation")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0, 5.9375, 9),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 1,
|
||||
"values": [&"Walk", &"WalkStare", &"Whatda"]
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("ChildrenSpriteHolder/Leila:animation")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"times": PackedFloat32Array(0, 7, 9),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 1,
|
||||
"values": [&"Walk", &"WalkStare", &"Whatda"]
|
||||
}
|
||||
tracks/4/type = "value"
|
||||
tracks/4/imported = false
|
||||
tracks/4/enabled = true
|
||||
tracks/4/path = NodePath("ChildrenSpriteHolder/Chester:animation")
|
||||
tracks/4/interp = 1
|
||||
tracks/4/loop_wrap = true
|
||||
tracks/4/keys = {
|
||||
"times": PackedFloat32Array(0, 6.9375, 9),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 1,
|
||||
"values": [&"Walk", &"WalkStare", &"Whatda"]
|
||||
}
|
||||
tracks/5/type = "value"
|
||||
tracks/5/imported = false
|
||||
tracks/5/enabled = true
|
||||
tracks/5/path = NodePath("ChildrenSpriteHolder/Gretchen:animation")
|
||||
tracks/5/interp = 1
|
||||
tracks/5/loop_wrap = true
|
||||
tracks/5/keys = {
|
||||
"times": PackedFloat32Array(0, 8, 9),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 1,
|
||||
"values": [&"Walk", &"WalkStare", &"Whatda"]
|
||||
}
|
||||
tracks/6/type = "value"
|
||||
tracks/6/imported = false
|
||||
tracks/6/enabled = true
|
||||
tracks/6/path = NodePath("SpriteHolder/MultiplyOverlay:position")
|
||||
tracks/6/interp = 1
|
||||
tracks/6/loop_wrap = true
|
||||
tracks/6/keys = {
|
||||
"times": PackedFloat32Array(0, 4, 9),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector2(1445, 540), Vector2(1445, 540), Vector2(541, 540)]
|
||||
}
|
||||
tracks/7/type = "value"
|
||||
tracks/7/imported = false
|
||||
tracks/7/enabled = true
|
||||
tracks/7/path = NodePath("SpriteHolder/FarelieAnimation:position")
|
||||
tracks/7/interp = 1
|
||||
tracks/7/loop_wrap = true
|
||||
tracks/7/keys = {
|
||||
"times": PackedFloat32Array(0, 10, 14.9375),
|
||||
"transitions": PackedFloat32Array(1, 0.8, 1),
|
||||
"update": 0,
|
||||
"values": [Vector2(-1539, 346), Vector2(-1539, 346), Vector2(660, 346)]
|
||||
}
|
||||
tracks/8/type = "value"
|
||||
tracks/8/imported = false
|
||||
tracks/8/enabled = true
|
||||
tracks/8/path = NodePath("SpriteHolder/FarelieAnimation:animation")
|
||||
tracks/8/interp = 1
|
||||
tracks/8/loop_wrap = true
|
||||
tracks/8/keys = {
|
||||
"times": PackedFloat32Array(0, 14.9375),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 1,
|
||||
"values": [&"Walk", &"Stand"]
|
||||
}
|
||||
tracks/9/type = "value"
|
||||
tracks/9/imported = false
|
||||
tracks/9/enabled = true
|
||||
tracks/9/path = NodePath("SpriteHolder/FarelieAnimation:visible")
|
||||
tracks/9/interp = 1
|
||||
tracks/9/loop_wrap = true
|
||||
tracks/9/keys = {
|
||||
"times": PackedFloat32Array(0, 15.9375),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 1,
|
||||
"values": [true, false]
|
||||
}
|
||||
tracks/10/type = "value"
|
||||
tracks/10/imported = false
|
||||
tracks/10/enabled = true
|
||||
tracks/10/path = NodePath("SpriteHolder/MorganDoor:visible")
|
||||
tracks/10/interp = 1
|
||||
tracks/10/loop_wrap = true
|
||||
tracks/10/keys = {
|
||||
"times": PackedFloat32Array(0, 15.9375),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 1,
|
||||
"values": [true, false]
|
||||
}
|
||||
tracks/11/type = "value"
|
||||
tracks/11/imported = false
|
||||
tracks/11/enabled = true
|
||||
tracks/11/path = NodePath("SpriteHolder/FarelieAnimation/DoorCloseSFX:playing")
|
||||
tracks/11/interp = 1
|
||||
tracks/11/loop_wrap = true
|
||||
tracks/11/keys = {
|
||||
"times": PackedFloat32Array(0, 15.9375),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 1,
|
||||
"values": [false, true]
|
||||
}
|
||||
tracks/12/type = "value"
|
||||
tracks/12/imported = false
|
||||
tracks/12/enabled = true
|
||||
tracks/12/path = NodePath(".:playFootsteps")
|
||||
tracks/12/interp = 1
|
||||
tracks/12/loop_wrap = true
|
||||
tracks/12/keys = {
|
||||
"times": PackedFloat32Array(0, 10, 14.9375),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 1,
|
||||
"values": [false, true, false]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_5lb3g"]
|
||||
length = 0.001
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("SpriteHolder:position")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector2(1412, 540)]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("SpriteHolder/FarelieAnimation:position")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector2(-1571, 346)]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("SpriteHolder/FarelieAnimation:animation")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [&"Walk"]
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("SpriteHolder/MorganDoor:visible")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [true]
|
||||
}
|
||||
tracks/4/type = "value"
|
||||
tracks/4/imported = false
|
||||
tracks/4/enabled = true
|
||||
tracks/4/path = NodePath("SpriteHolder/FarelieAnimation:visible")
|
||||
tracks/4/interp = 1
|
||||
tracks/4/loop_wrap = true
|
||||
tracks/4/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [true]
|
||||
}
|
||||
tracks/5/type = "value"
|
||||
tracks/5/imported = false
|
||||
tracks/5/enabled = true
|
||||
tracks/5/path = NodePath("ChildrenSpriteHolder:position")
|
||||
tracks/5/interp = 1
|
||||
tracks/5/loop_wrap = true
|
||||
tracks/5/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector2(-679, 888)]
|
||||
}
|
||||
tracks/6/type = "value"
|
||||
tracks/6/imported = false
|
||||
tracks/6/enabled = true
|
||||
tracks/6/path = NodePath("ChildrenSpriteHolder/Lewis:animation")
|
||||
tracks/6/interp = 1
|
||||
tracks/6/loop_wrap = true
|
||||
tracks/6/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [&"Walk"]
|
||||
}
|
||||
tracks/7/type = "value"
|
||||
tracks/7/imported = false
|
||||
tracks/7/enabled = true
|
||||
tracks/7/path = NodePath("ChildrenSpriteHolder/Leila:animation")
|
||||
tracks/7/interp = 1
|
||||
tracks/7/loop_wrap = true
|
||||
tracks/7/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [&"Walk"]
|
||||
}
|
||||
tracks/8/type = "value"
|
||||
tracks/8/imported = false
|
||||
tracks/8/enabled = true
|
||||
tracks/8/path = NodePath("ChildrenSpriteHolder/Chester:animation")
|
||||
tracks/8/interp = 1
|
||||
tracks/8/loop_wrap = true
|
||||
tracks/8/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [&"Walk"]
|
||||
}
|
||||
tracks/9/type = "value"
|
||||
tracks/9/imported = false
|
||||
tracks/9/enabled = true
|
||||
tracks/9/path = NodePath("ChildrenSpriteHolder/Gretchen:animation")
|
||||
tracks/9/interp = 1
|
||||
tracks/9/loop_wrap = true
|
||||
tracks/9/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [&"Walk"]
|
||||
}
|
||||
tracks/10/type = "value"
|
||||
tracks/10/imported = false
|
||||
tracks/10/enabled = true
|
||||
tracks/10/path = NodePath("SpriteHolder/MultiplyOverlay:position")
|
||||
tracks/10/interp = 1
|
||||
tracks/10/loop_wrap = true
|
||||
tracks/10/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector2(1445, 540)]
|
||||
}
|
||||
tracks/11/type = "value"
|
||||
tracks/11/imported = false
|
||||
tracks/11/enabled = true
|
||||
tracks/11/path = NodePath("SpriteHolder/FarelieAnimation/DoorCloseSFX:playing")
|
||||
tracks/11/interp = 1
|
||||
tracks/11/loop_wrap = true
|
||||
tracks/11/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/12/type = "value"
|
||||
tracks/12/imported = false
|
||||
tracks/12/enabled = true
|
||||
tracks/12/path = NodePath(".:playFootsteps")
|
||||
tracks/12/interp = 1
|
||||
tracks/12/loop_wrap = true
|
||||
tracks/12/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/13/type = "value"
|
||||
tracks/13/imported = false
|
||||
tracks/13/enabled = true
|
||||
tracks/13/path = NodePath("ApartmentAmbience:volume_db")
|
||||
tracks/13/interp = 1
|
||||
tracks/13/loop_wrap = true
|
||||
tracks/13/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [-60.0]
|
||||
}
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_s2ga7"]
|
||||
_data = {
|
||||
&"AptAmbienceFadeIn": SubResource("Animation_wvu4y"),
|
||||
&"AptAmbienceFadeOut": SubResource("Animation_aqumh"),
|
||||
&"Panning": SubResource("Animation_0rf2x"),
|
||||
&"Panning_2": SubResource("Animation_a8xjk"),
|
||||
&"Panning_3": SubResource("Animation_5q4j4"),
|
||||
&"RESET": SubResource("Animation_5lb3g")
|
||||
}
|
||||
|
||||
[node name="OutsideKidsScene" type="Control" groups=["cutscene"]]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1_g0h8g")
|
||||
nextScene_ = ExtResource("2_mubto")
|
||||
|
||||
[node name="SpriteHolder" type="Node2D" parent="."]
|
||||
position = Vector2(1412, 540)
|
||||
|
||||
[node name="Background" type="Sprite2D" parent="SpriteHolder"]
|
||||
light_mask = 0
|
||||
texture = ExtResource("1_o63iy")
|
||||
|
||||
[node name="MorganDoor" type="Sprite2D" parent="SpriteHolder"]
|
||||
light_mask = 0
|
||||
texture = ExtResource("2_qge2i")
|
||||
|
||||
[node name="FarelieAnimation" type="AnimatedSprite2D" parent="SpriteHolder"]
|
||||
position = Vector2(-1571, 346)
|
||||
sprite_frames = SubResource("SpriteFrames_v2ttx")
|
||||
animation = &"Walk"
|
||||
autoplay = "Walk"
|
||||
|
||||
[node name="DoorCloseSFX" type="AudioStreamPlayer2D" parent="SpriteHolder/FarelieAnimation"]
|
||||
stream = ExtResource("10_4c32i")
|
||||
|
||||
[node name="SoundsContainer" type="Node2D" parent="SpriteHolder/FarelieAnimation"]
|
||||
|
||||
[node name="StepSFX1" type="AudioStreamPlayer2D" parent="SpriteHolder/FarelieAnimation/SoundsContainer"]
|
||||
stream = ExtResource("11_bt3cp")
|
||||
|
||||
[node name="StepSFX2" type="AudioStreamPlayer2D" parent="SpriteHolder/FarelieAnimation/SoundsContainer"]
|
||||
stream = ExtResource("12_6p88u")
|
||||
|
||||
[node name="StepSFX3" type="AudioStreamPlayer2D" parent="SpriteHolder/FarelieAnimation/SoundsContainer"]
|
||||
stream = ExtResource("13_e47ca")
|
||||
|
||||
[node name="StepSFX4" type="AudioStreamPlayer2D" parent="SpriteHolder/FarelieAnimation/SoundsContainer"]
|
||||
stream = ExtResource("14_24fk8")
|
||||
|
||||
[node name="StepSFX5" type="AudioStreamPlayer2D" parent="SpriteHolder/FarelieAnimation/SoundsContainer"]
|
||||
stream = ExtResource("15_xoumh")
|
||||
|
||||
[node name="StepSFX6" type="AudioStreamPlayer2D" parent="SpriteHolder/FarelieAnimation/SoundsContainer"]
|
||||
stream = ExtResource("16_kqulh")
|
||||
|
||||
[node name="MultiplyOverlay" type="PointLight2D" parent="SpriteHolder"]
|
||||
top_level = true
|
||||
position = Vector2(1445, 540)
|
||||
blend_mode = 2
|
||||
texture = ExtResource("9_nqkfm")
|
||||
|
||||
[node name="TotalOverlay" type="PointLight2D" parent="SpriteHolder"]
|
||||
top_level = true
|
||||
position = Vector2(1413, 540)
|
||||
blend_mode = 2
|
||||
texture = ExtResource("10_p1ko4")
|
||||
|
||||
[node name="ChildrenSpriteHolder" type="Node2D" parent="."]
|
||||
position = Vector2(-679, 888)
|
||||
|
||||
[node name="Lewis" type="AnimatedSprite2D" parent="ChildrenSpriteHolder"]
|
||||
sprite_frames = SubResource("SpriteFrames_uixl5")
|
||||
animation = &"Walk"
|
||||
autoplay = "Walk"
|
||||
|
||||
[node name="Leila" type="AnimatedSprite2D" parent="ChildrenSpriteHolder"]
|
||||
position = Vector2(164, 0)
|
||||
sprite_frames = SubResource("SpriteFrames_e2hj6")
|
||||
animation = &"Walk"
|
||||
autoplay = "Walk"
|
||||
|
||||
[node name="Chester" type="AnimatedSprite2D" parent="ChildrenSpriteHolder"]
|
||||
position = Vector2(313, 0)
|
||||
sprite_frames = SubResource("SpriteFrames_hvs2a")
|
||||
animation = &"Walk"
|
||||
autoplay = "Walk"
|
||||
|
||||
[node name="Gretchen" type="AnimatedSprite2D" parent="ChildrenSpriteHolder"]
|
||||
position = Vector2(429, 0)
|
||||
sprite_frames = SubResource("SpriteFrames_feu7n")
|
||||
animation = &"Walk"
|
||||
autoplay = "Walk"
|
||||
|
||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
||||
libraries = {
|
||||
&"": SubResource("AnimationLibrary_s2ga7")
|
||||
}
|
||||
|
||||
[node name="ApartmentAmbience" type="AudioStreamPlayer" parent="."]
|
||||
stream = ExtResource("40_qr8uf")
|
||||
volume_db = -60.0
|
||||
autoplay = true
|
||||
parameters/looping = true
|
||||
|
||||
[connection signal="frame_changed" from="SpriteHolder/FarelieAnimation" to="." method="_on_farelie_animation_frame_changed"]
|
||||
[connection signal="animation_finished" from="AnimationPlayer" to="." method="_on_animation_player_animation_finished"]
|
||||
@@ -0,0 +1,74 @@
|
||||
extends Control
|
||||
|
||||
@onready var megan_fall_animation: AnimatedSprite2D = $SpriteHolder/FallingClip/MeganFallAnimation
|
||||
@onready var farelie_solo_animation: AnimatedSprite2D = $SpriteHolder/FarelieSoloAnimation
|
||||
@onready var megan_solo_animation: AnimatedSprite2D = $SpriteHolder/MeganSoloAnimation
|
||||
@onready var megan_farelie_hug_animation: AnimatedSprite2D = $SpriteHolder/MeganFarelieHugAnimation
|
||||
@onready var morgan_animation: AnimatedSprite2D = $SpriteHolder/MorganAnimation
|
||||
@onready var animation_player: AnimationPlayer = $AnimationPlayer
|
||||
@onready var farelie_walk_animation: AnimatedSprite2D = $SpriteHolder/Background/FarelieWalkAnimation
|
||||
@onready var sounds_container: Node2D = $SpriteHolder/MeganSoloAnimation/SoundsContainer
|
||||
|
||||
##Delay to add to the scene before automatically starting the animation
|
||||
@export var startDelay := 3.0
|
||||
##Delay to add at the end of the animation before fading to black
|
||||
@export var endDelay := 1.0
|
||||
##Next scene to load once animation finishes
|
||||
@export var nextScene_ : PackedScene
|
||||
|
||||
##Tracks when the footstep sfx should be played. Controlled by AnimationPlayer.
|
||||
##Must be exported var so AnimationPlayer can modify it.
|
||||
@export var playFootsteps := false
|
||||
|
||||
var dialog_pt1 = "demo_restaurant_pt1"
|
||||
var dialog_pt2 = "demo_restaurant_pt2"
|
||||
var dialog_end = "demo_restaurant_end"
|
||||
|
||||
var mini_scene_tracker := 0
|
||||
|
||||
func _ready() -> void:
|
||||
randomize()
|
||||
await get_tree().create_timer(3.0).timeout
|
||||
animation_player.play("AmbienceFadeIn")
|
||||
await get_tree().create_timer(startDelay).timeout
|
||||
DialogManager.start_cutscene_dialog(dialog_pt1)
|
||||
|
||||
func _on_dialog_ended() -> void:
|
||||
print("Dialog end!")
|
||||
if mini_scene_tracker == 0:
|
||||
mini_scene_tracker += 1
|
||||
animation_player.play("MeganEnter")
|
||||
elif mini_scene_tracker == 1:
|
||||
mini_scene_tracker += 1
|
||||
animation_player.play("MeganShoveActual")
|
||||
elif mini_scene_tracker == 2:
|
||||
await get_tree().create_timer(endDelay).timeout
|
||||
animation_player.play("AmbienceFadeOut")
|
||||
SceneManager.load_raw_packedScene(nextScene_, true, 0.25, 0.5, 0.25, 1.0)
|
||||
|
||||
func _on_animation_player_animation_started(anim_name: StringName) -> void:
|
||||
if anim_name == "MeganEnter":
|
||||
DialogManager.start_cutscene_dialog(dialog_pt2)
|
||||
|
||||
func _on_animation_player_animation_finished(anim_name: StringName) -> void:
|
||||
if anim_name == "MeganShoveActual":
|
||||
DialogManager.start_cutscene_dialog(dialog_end)
|
||||
|
||||
#This connection is needed so that when the animation_player changes falling megan's animation value it will play
|
||||
func _on_megan_fall_animation_animation_changed() -> void:
|
||||
megan_fall_animation.play()
|
||||
|
||||
#Same as above but for megan when she walks toward morgan with her arms out.
|
||||
func _on_megan_solo_animation_animation_changed() -> void:
|
||||
megan_solo_animation.play()
|
||||
|
||||
#Same as above but when farelie walks toward megan before hug
|
||||
func _on_farelie_walk_animation_animation_changed() -> void:
|
||||
farelie_walk_animation.play()
|
||||
|
||||
#Runs when megan solo animation frame changes.
|
||||
func _on_megan_solo_animation_frame_changed() -> void:
|
||||
if playFootsteps:
|
||||
if megan_solo_animation.get_frame() == 1:
|
||||
var chosenStepSFX : AudioStreamPlayer2D = sounds_container.get_children()[randi() % sounds_container.get_children().size()]
|
||||
chosenStepSFX.play()
|
||||
@@ -0,0 +1 @@
|
||||
uid://dghv18chd03oa
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,4 @@
|
||||
extends Button
|
||||
|
||||
func _on_pressed() -> void:
|
||||
get_tree().quit()
|
||||
@@ -0,0 +1 @@
|
||||
uid://nptdy4ivh7ps
|
||||
@@ -0,0 +1,82 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://cey4igavplswo"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://nptdy4ivh7ps" path="res://Cutscenes/shilling-quit-button.gd" id="2_3xohe"]
|
||||
[ext_resource type="FontFile" uid="uid://dbox5kplmky5w" path="res://assets/font/Bounded-Black.ttf" id="2_dupok"]
|
||||
|
||||
[node name="shilling" type="Control" groups=["cutscene"]]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="ColorRect" type="ColorRect" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
color = Color(0, 0, 0, 1)
|
||||
|
||||
[node name="CenterContainer" type="CenterContainer" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="CenterContainer"]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 150
|
||||
|
||||
[node name="Label" type="Label" parent="CenterContainer/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
theme_override_fonts/font = ExtResource("2_dupok")
|
||||
theme_override_font_sizes/font_size = 125
|
||||
text = "Thanks for
|
||||
playing!"
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="Label2" type="Label" parent="CenterContainer/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
theme_override_fonts/font = ExtResource("2_dupok")
|
||||
theme_override_font_sizes/font_size = 50
|
||||
text = "For more development updates, please check out our:"
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="CenterContainer/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 250
|
||||
alignment = 1
|
||||
|
||||
[node name="LinkButton" type="LinkButton" parent="CenterContainer/VBoxContainer/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
theme_override_fonts/font = ExtResource("2_dupok")
|
||||
theme_override_font_sizes/font_size = 100
|
||||
text = "Twitter"
|
||||
underline = 1
|
||||
uri = "https://x.com/Cavemanon"
|
||||
|
||||
[node name="LinkButton2" type="LinkButton" parent="CenterContainer/VBoxContainer/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
theme_override_fonts/font = ExtResource("2_dupok")
|
||||
theme_override_font_sizes/font_size = 100
|
||||
text = "Patron Blog"
|
||||
underline = 1
|
||||
uri = "https://support.cavemanon.xyz/blog-archive/"
|
||||
|
||||
[node name="Button" type="Button" parent="."]
|
||||
layout_mode = 0
|
||||
offset_top = 1009.0
|
||||
offset_right = 146.0
|
||||
offset_bottom = 1080.0
|
||||
theme_override_fonts/font = ExtResource("2_dupok")
|
||||
theme_override_font_sizes/font_size = 45
|
||||
text = "Quit"
|
||||
flat = true
|
||||
script = ExtResource("2_3xohe")
|
||||
|
||||
[connection signal="pressed" from="Button" to="Button" method="_on_pressed"]
|
||||
@@ -0,0 +1,661 @@
|
||||
GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
Version 3, 19 November 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU Affero General Public License is a free, copyleft license for
|
||||
software and other kinds of works, specifically designed to ensure
|
||||
cooperation with the community in the case of network server software.
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
our General Public Licenses are intended to guarantee your freedom to
|
||||
share and change all versions of a program--to make sure it remains free
|
||||
software for all its users.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
them if you wish), that you receive source code or can get it if you
|
||||
want it, that you can change the software or use pieces of it in new
|
||||
free programs, and that you know you can do these things.
|
||||
|
||||
Developers that use our General Public Licenses protect your rights
|
||||
with two steps: (1) assert copyright on the software, and (2) offer
|
||||
you this License which gives you legal permission to copy, distribute
|
||||
and/or modify the software.
|
||||
|
||||
A secondary benefit of defending all users' freedom is that
|
||||
improvements made in alternate versions of the program, if they
|
||||
receive widespread use, become available for other developers to
|
||||
incorporate. Many developers of free software are heartened and
|
||||
encouraged by the resulting cooperation. However, in the case of
|
||||
software used on network servers, this result may fail to come about.
|
||||
The GNU General Public License permits making a modified version and
|
||||
letting the public access it on a server without ever releasing its
|
||||
source code to the public.
|
||||
|
||||
The GNU Affero General Public License is designed specifically to
|
||||
ensure that, in such cases, the modified source code becomes available
|
||||
to the community. It requires the operator of a network server to
|
||||
provide the source code of the modified version running there to the
|
||||
users of that server. Therefore, public use of a modified version, on
|
||||
a publicly accessible server, gives the public access to the source
|
||||
code of the modified version.
|
||||
|
||||
An older license, called the Affero General Public License and
|
||||
published by Affero, was designed to accomplish similar goals. This is
|
||||
a different license, not a version of the Affero GPL, but Affero has
|
||||
released a new version of the Affero GPL which permits relicensing under
|
||||
this license.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
0. Definitions.
|
||||
|
||||
"This License" refers to version 3 of the GNU Affero General Public License.
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||
works, such as semiconductor masks.
|
||||
|
||||
"The Program" refers to any copyrightable work licensed under this
|
||||
License. Each licensee is addressed as "you". "Licensees" and
|
||||
"recipients" may be individuals or organizations.
|
||||
|
||||
To "modify" a work means to copy from or adapt all or part of the work
|
||||
in a fashion requiring copyright permission, other than the making of an
|
||||
exact copy. The resulting work is called a "modified version" of the
|
||||
earlier work or a work "based on" the earlier work.
|
||||
|
||||
A "covered work" means either the unmodified Program or a work based
|
||||
on the Program.
|
||||
|
||||
To "propagate" a work means to do anything with it that, without
|
||||
permission, would make you directly or secondarily liable for
|
||||
infringement under applicable copyright law, except executing it on a
|
||||
computer or modifying a private copy. Propagation includes copying,
|
||||
distribution (with or without modification), making available to the
|
||||
public, and in some countries other activities as well.
|
||||
|
||||
To "convey" a work means any kind of propagation that enables other
|
||||
parties to make or receive copies. Mere interaction with a user through
|
||||
a computer network, with no transfer of a copy, is not conveying.
|
||||
|
||||
An interactive user interface displays "Appropriate Legal Notices"
|
||||
to the extent that it includes a convenient and prominently visible
|
||||
feature that (1) displays an appropriate copyright notice, and (2)
|
||||
tells the user that there is no warranty for the work (except to the
|
||||
extent that warranties are provided), that licensees may convey the
|
||||
work under this License, and how to view a copy of this License. If
|
||||
the interface presents a list of user commands or options, such as a
|
||||
menu, a prominent item in the list meets this criterion.
|
||||
|
||||
1. Source Code.
|
||||
|
||||
The "source code" for a work means the preferred form of the work
|
||||
for making modifications to it. "Object code" means any non-source
|
||||
form of a work.
|
||||
|
||||
A "Standard Interface" means an interface that either is an official
|
||||
standard defined by a recognized standards body, or, in the case of
|
||||
interfaces specified for a particular programming language, one that
|
||||
is widely used among developers working in that language.
|
||||
|
||||
The "System Libraries" of an executable work include anything, other
|
||||
than the work as a whole, that (a) is included in the normal form of
|
||||
packaging a Major Component, but which is not part of that Major
|
||||
Component, and (b) serves only to enable use of the work with that
|
||||
Major Component, or to implement a Standard Interface for which an
|
||||
implementation is available to the public in source code form. A
|
||||
"Major Component", in this context, means a major essential component
|
||||
(kernel, window system, and so on) of the specific operating system
|
||||
(if any) on which the executable work runs, or a compiler used to
|
||||
produce the work, or an object code interpreter used to run it.
|
||||
|
||||
The "Corresponding Source" for a work in object code form means all
|
||||
the source code needed to generate, install, and (for an executable
|
||||
work) run the object code and to modify the work, including scripts to
|
||||
control those activities. However, it does not include the work's
|
||||
System Libraries, or general-purpose tools or generally available free
|
||||
programs which are used unmodified in performing those activities but
|
||||
which are not part of the work. For example, Corresponding Source
|
||||
includes interface definition files associated with source files for
|
||||
the work, and the source code for shared libraries and dynamically
|
||||
linked subprograms that the work is specifically designed to require,
|
||||
such as by intimate data communication or control flow between those
|
||||
subprograms and other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users
|
||||
can regenerate automatically from other parts of the Corresponding
|
||||
Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that
|
||||
same work.
|
||||
|
||||
2. Basic Permissions.
|
||||
|
||||
All rights granted under this License are granted for the term of
|
||||
copyright on the Program, and are irrevocable provided the stated
|
||||
conditions are met. This License explicitly affirms your unlimited
|
||||
permission to run the unmodified Program. The output from running a
|
||||
covered work is covered by this License only if the output, given its
|
||||
content, constitutes a covered work. This License acknowledges your
|
||||
rights of fair use or other equivalent, as provided by copyright law.
|
||||
|
||||
You may make, run and propagate covered works that you do not
|
||||
convey, without conditions so long as your license otherwise remains
|
||||
in force. You may convey covered works to others for the sole purpose
|
||||
of having them make modifications exclusively for you, or provide you
|
||||
with facilities for running those works, provided that you comply with
|
||||
the terms of this License in conveying all material for which you do
|
||||
not control copyright. Those thus making or running the covered works
|
||||
for you must do so exclusively on your behalf, under your direction
|
||||
and control, on terms that prohibit them from making any copies of
|
||||
your copyrighted material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under
|
||||
the conditions stated below. Sublicensing is not allowed; section 10
|
||||
makes it unnecessary.
|
||||
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
|
||||
No covered work shall be deemed part of an effective technological
|
||||
measure under any applicable law fulfilling obligations under article
|
||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||
similar laws prohibiting or restricting circumvention of such
|
||||
measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid
|
||||
circumvention of technological measures to the extent such circumvention
|
||||
is effected by exercising rights under this License with respect to
|
||||
the covered work, and you disclaim any intention to limit operation or
|
||||
modification of the work as a means of enforcing, against the work's
|
||||
users, your or third parties' legal rights to forbid circumvention of
|
||||
technological measures.
|
||||
|
||||
4. Conveying Verbatim Copies.
|
||||
|
||||
You may convey verbatim copies of the Program's source code as you
|
||||
receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice;
|
||||
keep intact all notices stating that this License and any
|
||||
non-permissive terms added in accord with section 7 apply to the code;
|
||||
keep intact all notices of the absence of any warranty; and give all
|
||||
recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey,
|
||||
and you may offer support or warranty protection for a fee.
|
||||
|
||||
5. Conveying Modified Source Versions.
|
||||
|
||||
You may convey a work based on the Program, or the modifications to
|
||||
produce it from the Program, in the form of source code under the
|
||||
terms of section 4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified
|
||||
it, and giving a relevant date.
|
||||
|
||||
b) The work must carry prominent notices stating that it is
|
||||
released under this License and any conditions added under section
|
||||
7. This requirement modifies the requirement in section 4 to
|
||||
"keep intact all notices".
|
||||
|
||||
c) You must license the entire work, as a whole, under this
|
||||
License to anyone who comes into possession of a copy. This
|
||||
License will therefore apply, along with any applicable section 7
|
||||
additional terms, to the whole of the work, and all its parts,
|
||||
regardless of how they are packaged. This License gives no
|
||||
permission to license the work in any other way, but it does not
|
||||
invalidate such permission if you have separately received it.
|
||||
|
||||
d) If the work has interactive user interfaces, each must display
|
||||
Appropriate Legal Notices; however, if the Program has interactive
|
||||
interfaces that do not display Appropriate Legal Notices, your
|
||||
work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent
|
||||
works, which are not by their nature extensions of the covered work,
|
||||
and which are not combined with it such as to form a larger program,
|
||||
in or on a volume of a storage or distribution medium, is called an
|
||||
"aggregate" if the compilation and its resulting copyright are not
|
||||
used to limit the access or legal rights of the compilation's users
|
||||
beyond what the individual works permit. Inclusion of a covered work
|
||||
in an aggregate does not cause this License to apply to the other
|
||||
parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
|
||||
You may convey a covered work in object code form under the terms
|
||||
of sections 4 and 5, provided that you also convey the
|
||||
machine-readable Corresponding Source under the terms of this License,
|
||||
in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by the
|
||||
Corresponding Source fixed on a durable physical medium
|
||||
customarily used for software interchange.
|
||||
|
||||
b) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by a
|
||||
written offer, valid for at least three years and valid for as
|
||||
long as you offer spare parts or customer support for that product
|
||||
model, to give anyone who possesses the object code either (1) a
|
||||
copy of the Corresponding Source for all the software in the
|
||||
product that is covered by this License, on a durable physical
|
||||
medium customarily used for software interchange, for a price no
|
||||
more than your reasonable cost of physically performing this
|
||||
conveying of source, or (2) access to copy the
|
||||
Corresponding Source from a network server at no charge.
|
||||
|
||||
c) Convey individual copies of the object code with a copy of the
|
||||
written offer to provide the Corresponding Source. This
|
||||
alternative is allowed only occasionally and noncommercially, and
|
||||
only if you received the object code with such an offer, in accord
|
||||
with subsection 6b.
|
||||
|
||||
d) Convey the object code by offering access from a designated
|
||||
place (gratis or for a charge), and offer equivalent access to the
|
||||
Corresponding Source in the same way through the same place at no
|
||||
further charge. You need not require recipients to copy the
|
||||
Corresponding Source along with the object code. If the place to
|
||||
copy the object code is a network server, the Corresponding Source
|
||||
may be on a different server (operated by you or a third party)
|
||||
that supports equivalent copying facilities, provided you maintain
|
||||
clear directions next to the object code saying where to find the
|
||||
Corresponding Source. Regardless of what server hosts the
|
||||
Corresponding Source, you remain obligated to ensure that it is
|
||||
available for as long as needed to satisfy these requirements.
|
||||
|
||||
e) Convey the object code using peer-to-peer transmission, provided
|
||||
you inform other peers where the object code and Corresponding
|
||||
Source of the work are being offered to the general public at no
|
||||
charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded
|
||||
from the Corresponding Source as a System Library, need not be
|
||||
included in conveying the object code work.
|
||||
|
||||
A "User Product" is either (1) a "consumer product", which means any
|
||||
tangible personal property which is normally used for personal, family,
|
||||
or household purposes, or (2) anything designed or sold for incorporation
|
||||
into a dwelling. In determining whether a product is a consumer product,
|
||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||
product received by a particular user, "normally used" refers to a
|
||||
typical or common use of that class of product, regardless of the status
|
||||
of the particular user or of the way in which the particular user
|
||||
actually uses, or expects or is expected to use, the product. A product
|
||||
is a consumer product regardless of whether the product has substantial
|
||||
commercial, industrial or non-consumer uses, unless such uses represent
|
||||
the only significant mode of use of the product.
|
||||
|
||||
"Installation Information" for a User Product means any methods,
|
||||
procedures, authorization keys, or other information required to install
|
||||
and execute modified versions of a covered work in that User Product from
|
||||
a modified version of its Corresponding Source. The information must
|
||||
suffice to ensure that the continued functioning of the modified object
|
||||
code is in no case prevented or interfered with solely because
|
||||
modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or
|
||||
specifically for use in, a User Product, and the conveying occurs as
|
||||
part of a transaction in which the right of possession and use of the
|
||||
User Product is transferred to the recipient in perpetuity or for a
|
||||
fixed term (regardless of how the transaction is characterized), the
|
||||
Corresponding Source conveyed under this section must be accompanied
|
||||
by the Installation Information. But this requirement does not apply
|
||||
if neither you nor any third party retains the ability to install
|
||||
modified object code on the User Product (for example, the work has
|
||||
been installed in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a
|
||||
requirement to continue to provide support service, warranty, or updates
|
||||
for a work that has been modified or installed by the recipient, or for
|
||||
the User Product in which it has been modified or installed. Access to a
|
||||
network may be denied when the modification itself materially and
|
||||
adversely affects the operation of the network or violates the rules and
|
||||
protocols for communication across the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided,
|
||||
in accord with this section must be in a format that is publicly
|
||||
documented (and with an implementation available to the public in
|
||||
source code form), and must require no special password or key for
|
||||
unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
|
||||
"Additional permissions" are terms that supplement the terms of this
|
||||
License by making exceptions from one or more of its conditions.
|
||||
Additional permissions that are applicable to the entire Program shall
|
||||
be treated as though they were included in this License, to the extent
|
||||
that they are valid under applicable law. If additional permissions
|
||||
apply only to part of the Program, that part may be used separately
|
||||
under those permissions, but the entire Program remains governed by
|
||||
this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option
|
||||
remove any additional permissions from that copy, or from any part of
|
||||
it. (Additional permissions may be written to require their own
|
||||
removal in certain cases when you modify the work.) You may place
|
||||
additional permissions on material, added by you to a covered work,
|
||||
for which you have or can give appropriate copyright permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you
|
||||
add to a covered work, you may (if authorized by the copyright holders of
|
||||
that material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the
|
||||
terms of sections 15 and 16 of this License; or
|
||||
|
||||
b) Requiring preservation of specified reasonable legal notices or
|
||||
author attributions in that material or in the Appropriate Legal
|
||||
Notices displayed by works containing it; or
|
||||
|
||||
c) Prohibiting misrepresentation of the origin of that material, or
|
||||
requiring that modified versions of such material be marked in
|
||||
reasonable ways as different from the original version; or
|
||||
|
||||
d) Limiting the use for publicity purposes of names of licensors or
|
||||
authors of the material; or
|
||||
|
||||
e) Declining to grant rights under trademark law for use of some
|
||||
trade names, trademarks, or service marks; or
|
||||
|
||||
f) Requiring indemnification of licensors and authors of that
|
||||
material by anyone who conveys the material (or modified versions of
|
||||
it) with contractual assumptions of liability to the recipient, for
|
||||
any liability that these contractual assumptions directly impose on
|
||||
those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered "further
|
||||
restrictions" within the meaning of section 10. If the Program as you
|
||||
received it, or any part of it, contains a notice stating that it is
|
||||
governed by this License along with a term that is a further
|
||||
restriction, you may remove that term. If a license document contains
|
||||
a further restriction but permits relicensing or conveying under this
|
||||
License, you may add to a covered work material governed by the terms
|
||||
of that license document, provided that the further restriction does
|
||||
not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you
|
||||
must place, in the relevant source files, a statement of the
|
||||
additional terms that apply to those files, or a notice indicating
|
||||
where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the
|
||||
form of a separately written license, or stated as exceptions;
|
||||
the above requirements apply either way.
|
||||
|
||||
8. Termination.
|
||||
|
||||
You may not propagate or modify a covered work except as expressly
|
||||
provided under this License. Any attempt otherwise to propagate or
|
||||
modify it is void, and will automatically terminate your rights under
|
||||
this License (including any patent licenses granted under the third
|
||||
paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your
|
||||
license from a particular copyright holder is reinstated (a)
|
||||
provisionally, unless and until the copyright holder explicitly and
|
||||
finally terminates your license, and (b) permanently, if the copyright
|
||||
holder fails to notify you of the violation by some reasonable means
|
||||
prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, you do not qualify to receive new licenses for the same
|
||||
material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
|
||||
You are not required to accept this License in order to receive or
|
||||
run a copy of the Program. Ancillary propagation of a covered work
|
||||
occurring solely as a consequence of using peer-to-peer transmission
|
||||
to receive a copy likewise does not require acceptance. However,
|
||||
nothing other than this License grants you permission to propagate or
|
||||
modify any covered work. These actions infringe copyright if you do
|
||||
not accept this License. Therefore, by modifying or propagating a
|
||||
covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
|
||||
Each time you convey a covered work, the recipient automatically
|
||||
receives a license from the original licensors, to run, modify and
|
||||
propagate that work, subject to this License. You are not responsible
|
||||
for enforcing compliance by third parties with this License.
|
||||
|
||||
An "entity transaction" is a transaction transferring control of an
|
||||
organization, or substantially all assets of one, or subdividing an
|
||||
organization, or merging organizations. If propagation of a covered
|
||||
work results from an entity transaction, each party to that
|
||||
transaction who receives a copy of the work also receives whatever
|
||||
licenses to the work the party's predecessor in interest had or could
|
||||
give under the previous paragraph, plus a right to possession of the
|
||||
Corresponding Source of the work from the predecessor in interest, if
|
||||
the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the
|
||||
rights granted or affirmed under this License. For example, you may
|
||||
not impose a license fee, royalty, or other charge for exercise of
|
||||
rights granted under this License, and you may not initiate litigation
|
||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||
any patent claim is infringed by making, using, selling, offering for
|
||||
sale, or importing the Program or any portion of it.
|
||||
|
||||
11. Patents.
|
||||
|
||||
A "contributor" is a copyright holder who authorizes use under this
|
||||
License of the Program or a work on which the Program is based. The
|
||||
work thus licensed is called the contributor's "contributor version".
|
||||
|
||||
A contributor's "essential patent claims" are all patent claims
|
||||
owned or controlled by the contributor, whether already acquired or
|
||||
hereafter acquired, that would be infringed by some manner, permitted
|
||||
by this License, of making, using, or selling its contributor version,
|
||||
but do not include claims that would be infringed only as a
|
||||
consequence of further modification of the contributor version. For
|
||||
purposes of this definition, "control" includes the right to grant
|
||||
patent sublicenses in a manner consistent with the requirements of
|
||||
this License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||
patent license under the contributor's essential patent claims, to
|
||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||
propagate the contents of its contributor version.
|
||||
|
||||
In the following three paragraphs, a "patent license" is any express
|
||||
agreement or commitment, however denominated, not to enforce a patent
|
||||
(such as an express permission to practice a patent or covenant not to
|
||||
sue for patent infringement). To "grant" such a patent license to a
|
||||
party means to make such an agreement or commitment not to enforce a
|
||||
patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license,
|
||||
and the Corresponding Source of the work is not available for anyone
|
||||
to copy, free of charge and under the terms of this License, through a
|
||||
publicly available network server or other readily accessible means,
|
||||
then you must either (1) cause the Corresponding Source to be so
|
||||
available, or (2) arrange to deprive yourself of the benefit of the
|
||||
patent license for this particular work, or (3) arrange, in a manner
|
||||
consistent with the requirements of this License, to extend the patent
|
||||
license to downstream recipients. "Knowingly relying" means you have
|
||||
actual knowledge that, but for the patent license, your conveying the
|
||||
covered work in a country, or your recipient's use of the covered work
|
||||
in a country, would infringe one or more identifiable patents in that
|
||||
country that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or
|
||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||
covered work, and grant a patent license to some of the parties
|
||||
receiving the covered work authorizing them to use, propagate, modify
|
||||
or convey a specific copy of the covered work, then the patent license
|
||||
you grant is automatically extended to all recipients of the covered
|
||||
work and works based on it.
|
||||
|
||||
A patent license is "discriminatory" if it does not include within
|
||||
the scope of its coverage, prohibits the exercise of, or is
|
||||
conditioned on the non-exercise of one or more of the rights that are
|
||||
specifically granted under this License. You may not convey a covered
|
||||
work if you are a party to an arrangement with a third party that is
|
||||
in the business of distributing software, under which you make payment
|
||||
to the third party based on the extent of your activity of conveying
|
||||
the work, and under which the third party grants, to any of the
|
||||
parties who would receive the covered work from you, a discriminatory
|
||||
patent license (a) in connection with copies of the covered work
|
||||
conveyed by you (or copies made from those copies), or (b) primarily
|
||||
for and in connection with specific products or compilations that
|
||||
contain the covered work, unless you entered into that arrangement,
|
||||
or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting
|
||||
any implied license or other defenses to infringement that may
|
||||
otherwise be available to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
|
||||
If conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot convey a
|
||||
covered work so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you may
|
||||
not convey it at all. For example, if you agree to terms that obligate you
|
||||
to collect a royalty for further conveying from those to whom you convey
|
||||
the Program, the only way you could satisfy both those terms and this
|
||||
License would be to refrain entirely from conveying the Program.
|
||||
|
||||
13. Remote Network Interaction; Use with the GNU General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, if you modify the
|
||||
Program, your modified version must prominently offer all users
|
||||
interacting with it remotely through a computer network (if your version
|
||||
supports such interaction) an opportunity to receive the Corresponding
|
||||
Source of your version by providing access to the Corresponding Source
|
||||
from a network server at no charge, through some standard or customary
|
||||
means of facilitating copying of software. This Corresponding Source
|
||||
shall include the Corresponding Source for any work covered by version 3
|
||||
of the GNU General Public License that is incorporated pursuant to the
|
||||
following paragraph.
|
||||
|
||||
Notwithstanding any other provision of this License, you have
|
||||
permission to link or combine any covered work with a work licensed
|
||||
under version 3 of the GNU General Public License into a single
|
||||
combined work, and to convey the resulting work. The terms of this
|
||||
License will continue to apply to the part which is the covered work,
|
||||
but the work with which it is combined will remain governed by version
|
||||
3 of the GNU General Public License.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU Affero General Public License from time to time. Such new versions
|
||||
will be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Program specifies that a certain numbered version of the GNU Affero General
|
||||
Public License "or any later version" applies to it, you have the
|
||||
option of following the terms and conditions either of that numbered
|
||||
version or of any later version published by the Free Software
|
||||
Foundation. If the Program does not specify a version number of the
|
||||
GNU Affero General Public License, you may choose any version ever published
|
||||
by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future
|
||||
versions of the GNU Affero General Public License can be used, that proxy's
|
||||
public statement of acceptance of a version permanently authorizes you
|
||||
to choose that version for the Program.
|
||||
|
||||
Later license versions may give you additional or different
|
||||
permissions. However, no additional obligations are imposed on any
|
||||
author or copyright holder as a result of your choosing to follow a
|
||||
later version.
|
||||
|
||||
15. Disclaimer of Warranty.
|
||||
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. Limitation of Liability.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGES.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
|
||||
If the disclaimer of warranty and limitation of liability provided
|
||||
above cannot be given local legal effect according to their terms,
|
||||
reviewing courts shall apply local law that most closely approximates
|
||||
an absolute waiver of all civil liability in connection with the
|
||||
Program, unless a warranty or assumption of liability accompanies a
|
||||
copy of the Program in return for a fee.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
state the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If your software can interact with users remotely through a computer
|
||||
network, you should also make sure that it provides a way for users to
|
||||
get its source. For example, if your program is a web application, its
|
||||
interface could display a "Source" link that leads users to an archive
|
||||
of the code. There are many ways you could offer source, and different
|
||||
solutions will be better for different programs; see section 13 for the
|
||||
specific requirements.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
For more information on this, and how to apply and follow the GNU AGPL, see
|
||||
<https://www.gnu.org/licenses/>.
|
||||