This commit is contained in:
Ententerminator 2020-01-26 19:26:04 +01:00
commit cf49452467
50 changed files with 13304 additions and 262 deletions

View File

@ -4,51 +4,191 @@ extends NPC
export(NodePath) var _visibility_path: NodePath
export(int) var _player_follow_pill_level = 3
onready var visibility_cone_mesh = get_node("Visibility/VisibilityCone")
const MAX_CMDS = 5 # maximum repeaded commands before Meldewesen gets piss
const CMD_DIFF_MS = 4000 # time in ms before new command
const VISIBILITY_CONE_ALPHA = 0.2
enum BEHAVIOR {
NORMAL = 0,
GO_WORK = 1,
GO_HOME = 2,
TAKE_PILLS = 3,
DO_JOB = 4,
ANGRY = 5
}
var _curMood # current set behavior
var _visibility: Area
var _interactArea: Area
var _audioPlayer: AudioStreamPlayer3D
var _playerRef
var _followingPlayer = false # true if Meldewesen finds player "suspicios" and follows
var _huntingPlayer = false # active if the Meldewesen wants to "catch" the player
var _seeingPlayer = false # as long as player is in visible range
var _lastSound = 0 # timestamp of last played message
var _countCmds = 0 # count of spoken commands -> after MAX_CMDS Meldewesen gets pissy
func _ready():
Logger.set_logger_level(Logger.LOG_LEVEL_FINE)
_visibility = get_node(_visibility_path) as Area
#Logger.set_logger_level(Logger.LOG_LEVEL_FINE)
if _visibility:
_audioPlayer = get_node("AudioStreamPlayer3D") as AudioStreamPlayer3D
assert(null != _audioPlayer)
_visibility = get_node(_visibility_path) as Area
assert(null != _visibility)
_visibility.connect("body_entered", self, "_on_body_entered_visibility")
_visibility.connect("body_exited", self, "_on_body_exited_visibility")
# setup collisions with player
var _interactArea = get_node("InteractArea") as Area
assert(null != _interactArea)
_interactArea.connect("area_entered", self, "_on_area_entered")
# TODO: does this implementation have to be that way?
for player in get_tree().get_nodes_in_group("Player"):
if player.is_class("KinematicBody"):
_playerRef = player
break
assert(null != _playerRef)
_set_behavior()
func _process(_delta):
# movement
if current_target:
# stop following player if pill level is high enough and player is not in an illegal area
if Pills.get_round_level() > _player_follow_pill_level and _playerRef.Is_in_Illegal_Area() == false:
Logger.info("player pill level ok and no illegal actions detected!")
current_target = null
# otherwise set new position of player
else:
# continue following player after illegal action or low pill level
if _huntingPlayer or (_followingPlayer and Pills.get_round_level() <= _player_follow_pill_level):
current_target = _playerRef.transform.origin
# stop following player if pill level is high enough and player is not in an illegal area
else:
Logger.info("player pill level ok and no illegal actions detected!")
_followingPlayer = false
current_target = null
if _seeingPlayer:
# logic
_set_behavior()
# audio
if _audioPlayer.stream != null:
var cur_time = OS.get_ticks_msec()
if cur_time - _lastSound > CMD_DIFF_MS:
_audioPlayer.play()
_lastSound = cur_time
_countCmds += 1
func _on_body_entered_visibility(body: PhysicsBody):
func _on_area_entered (area: Area):
if area.is_in_group("Player") and _huntingPlayer:
Logger.info("caught player!")
Daytime.emit_signal("respawn")
func change_visibility_cone_color(new_color: Color):
visibility_cone_mesh.get_surface_material(0).albedo_color = new_color
visibility_cone_mesh.get_surface_material(0).albedo_color.a = VISIBILITY_CONE_ALPHA
func _load_sound ():
match _curMood:
BEHAVIOR.NORMAL:
_audioPlayer.stream = null
BEHAVIOR.GO_WORK:
Logger.info("say go to work")
_audioPlayer.stream = load("res://Resources/Audio/to-work.wav")
BEHAVIOR.GO_HOME:
Logger.info("say go home")
_audioPlayer.stream = load("res://Resources/Audio/go-home.wav")
BEHAVIOR.TAKE_PILLS:
Logger.info("say take your pills")
_audioPlayer.stream = load("res://Resources/Audio/take-pills.wav")
BEHAVIOR.DO_JOB:
Logger.info("say do your job")
_audioPlayer.stream = load("res://Resources/Audio/do-job.wav")
BEHAVIOR.ANGRY:
Logger.info("say stop!")
_audioPlayer.stream = load("res://Resources/Audio/Stop you violated the law.wav")
func _set_behavior ():
if _huntingPlayer == false:
var reason = null
var daytime = Daytime.get_time()
if _playerRef.IsHunted: # player is already marked by another Meldewesen
reason = "player is haunted"
elif _playerRef.is_in_illegalzone(): # player is in illegal area
reason = "player is haunted in illegal area"
elif Pills.get_round_level() == 0: # player has taken no pills in a while
reason = "player's pill level is zero"
elif _playerRef.IsOutside and daytime > Daytime.WORK_TIME and daytime < Daytime.SLEEP_TIME: # outside during WORK_TIME
reason = "player outside during worktime"
#elif _playerRef.IsInFactory and daytime < Daytime.WORK_TIME and daytime > Daytime.SLEEP_TIME: # at work after out of WORK_TIME
# EDIT: too early at work is not an angry reason :p
elif _playerRef.IsInFactory and daytime > Daytime.SLEEP_TIME: # at work after out of WORK_TIME
reason = "player in factory out of worktime"
elif _countCmds > MAX_CMDS: # after MAX_CMDS repeats of the same command
reason = "player is seemingly not coorperativ"
# mark player for all other Meldewesen if seen during illegal action
if reason != null:
Logger.info("catch player! reason: " + reason)
_huntingPlayer = true
_playerRef.IsHunted = true
change_visibility_cone_color(Color.red)
if _followingPlayer == false:
# If the player didn't take enough pills lately, they're suspicious -> following
if Pills.get_round_level() <= _player_follow_pill_level:
Logger.info("The player's pill level is too low - following!")
_followingPlayer = true
change_visibility_cone_color(Color.yellowgreen)
if _huntingPlayer or _followingPlayer:
current_target = _playerRef.transform.origin
else:
change_visibility_cone_color(Color.green)
var mood = BEHAVIOR.NORMAL
var daytime = Daytime.get_time()
if _playerRef.IsHunted:
mood = BEHAVIOR.ANGRY
# do your job
elif _playerRef.is_in_workzone():
mood = BEHAVIOR.DO_JOB
# take your pills
elif Pills.get_level() < Pills.get_max()*0.5:
mood = BEHAVIOR.TAKE_PILLS
# go to work
elif daytime < Daytime.WORK_TIME:
mood = BEHAVIOR.GO_WORK
# go home
elif daytime > Daytime.SLEEP_TIME:
mood = BEHAVIOR.GO_HOME
if mood != _curMood:
Logger.info("new mood: " + BEHAVIOR.keys()[mood] + " with cntcmd: " + String(_countCmds))
_countCmds = 0
_curMood = mood
_load_sound()
func _on_body_entered_visibility (body: PhysicsBody):
#Logger.trace("Meldewesen seeing %s" % [body])
if body.is_in_group("Player"):
Logger.info("Seeing player!")
_seeingPlayer = true
# check if player is in illegal area
if _playerRef.Is_in_Illegal_Area():
Logger.info("player is in illegal area - following!")
current_target = body.transform.origin
# If the player didn't take enough pills lately, they're suspicious -> Run towards them!
elif Pills.get_round_level() <= _player_follow_pill_level:
Logger.info("The player's pill level is too low - following!")
current_target = body.transform.origin
_set_behavior()
func _on_body_exited_visibility(body: PhysicsBody):
if body.is_in_group("Player"):
Logger.info("Stopped seeing player!")
_seeingPlayer = false
_countCmds = 0
if _huntingPlayer == false and _followingPlayer == false:
current_target = null

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,8 @@
[gd_resource type="SpatialMaterial" format=2]
[resource]
flags_transparent = true
params_cull_mode = 2
albedo_color = Color( 1, 0, 0, 0.329412 )
metallic = 0.44
roughness = 0.58

View File

@ -3,6 +3,7 @@ class_name NPC
export(float) var turn_speed = 2.5
export(float) var speed = 8
var current_target
var current_look_target
@ -21,6 +22,13 @@ func _process(delta):
if diff.length() > 0.1:
look_at(transform.origin + target, Vector3.UP)
if current_target:
# Move towards the current goal
var direction_normalized: Vector3 = (current_target - transform.origin).normalized()
look_towards(direction_normalized)
move_towards(direction_normalized * speed)
func set_position(position: Vector3):
transform.origin = position

View File

@ -32,11 +32,28 @@ var _vel = Vector3()
var _is_sprinting : bool
var _illegal_areas : int
var _save_areas : int
var _work_areas : int
var _prev_look
# TODO: move to global
var _inventory: Control
# public properties
#var IsSuspicios # not needed > Meldewesen handles themselves
export(bool) var IsHunted # player is beeing flagged if one Meldewesen sees an illegal action
export(bool) var IsOutside = true # active while player is not in factory
export(bool) var IsInFactory = false # only active in factory scene
export(bool) var IsInLabyrinth = false
func is_in_illegalzone ():
return _illegal_areas > 0
func is_in_savezone ():
return _save_areas > 0
func is_in_workzone ():
return _work_areas > 0
func _ready():
# Assign child node variables
@ -62,6 +79,11 @@ func _ready():
_inventory = get_node("HUD")
# Set special fast time when in labyrinth
if IsInLabyrinth:
Daytime.increase_per_second = 100
Pills._decrease_per_second = 0.8
# setup collisions with Meldewesen
var area = get_node("InteractArea") as Area
assert(null != area)
@ -70,6 +92,10 @@ func _ready():
Daytime.connect("respawn", self, "_on_respawn")
var player = get_node("AudioStreamPlayer3D")
player.stream = load("res://Resources/Audio/cock.wav")
player.play()
func _physics_process(delta):
process_input()
@ -180,28 +206,28 @@ func _input(event):
_camera.rotation_degrees.x = clamp(_camera.rotation_degrees.x, -70, 70)
func _on_area_entered (area: Area):
if area.is_in_group("Enemy"):
Logger.info("ermahgerd they touched :-o !")
if _illegal_areas > 0: # or Pills.get_level() == 0: #< Pills.get_max() * 0.5:
# TODO: check why this does not work as intended:
#var player = AudioStreamPlayer3D.new()
#var audio_file = "res://Resources/Audio/dino-eat.wav"
#player.stream = load("res://Resources/Audio/dino-eat.wav")
#add_child(player)
#Logger.info("should play sound again?")
#player.play()
#remove_child(player)
#player. queue_free()
get_node("AudioStreamPlayer3D").play()
yield(get_node("AudioStreamPlayer3D"), "finished")
_on_respawn() # TODO: also raise if Meldewesen is looking at player and pill level reaches treshold!
elif area.is_in_group("Forbidden"):
if area.is_in_group("Forbidden"):
Logger.info("entering forbidden area!")
_illegal_areas += 1
elif area.is_in_group("Savehouse"):
Logger.info("entering save area!")
_save_areas += 1
elif area.is_in_group("Workwork"):
Logger.info("entering work area!")
_work_areas += 1
elif area.is_in_group("FactoryEntry"):
Logger.info("entering factory")
IsInFactory = true
IsOutside = false
# TODO: move not change_scene!
get_tree().change_scene("res://Level/InFactory.tscn")
# TODO: other entries
elif area.is_in_group("OutsideEntry"):
Logger.info("leaving factory")
IsInFactory = false
IsOutside = true
# TODO: move not change_scene!
get_tree().change_scene("res://Level/World.tscn")
func _on_area_exited (area: Area):
@ -211,28 +237,30 @@ func _on_area_exited (area: Area):
elif area.is_in_group("Savehouse"):
Logger.info("leaving save area!")
_save_areas -= 1
elif area.is_in_group("Workwork"):
Logger.info("leaving work area!")
_work_areas -= 1
func _on_respawn ():
Logger.info("respawning")
# fade to black and restart scene
_inventory.hide()
_inventory.hide() # disable hud for the time of respawn animation
if not IsInLabyrinth:
_animationFadeOut.play("FadeOut")
yield(_animationFadeOut, "animation_finished")
_animationFadeOut.seek(0, true)
# reset values
Pills._set_level(Pills.get_max())
Daytime._set_time(0)
Logger.info("save areas: " + String(_save_areas))
if _save_areas < 1:
if _save_areas < 1 and not IsInLabyrinth:
Logger.info("reload scene")
Pills._set_level(Pills.get_max())
get_tree().reload_current_scene()
_inventory.show()
func Is_in_Illegal_Area ():
#Logger.info("illegal areas: " + String(_illegal_areas))
return _illegal_areas > 0
_inventory.show() # enable hud again

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=23 format=2]
[gd_scene load_steps=22 format=2]
[ext_resource path="res://Characters/Player/Player.gd" type="Script" id=1]
[ext_resource path="res://Characters/Player/PillCameras.gd" type="Script" id=2]
@ -6,12 +6,11 @@
[ext_resource path="res://Shaders/FadeOut.shader" type="Shader" id=4]
[ext_resource path="res://Shaders/Masks/from_center.png" type="Texture" id=5]
[ext_resource path="res://Resources/Audio/dino-eat.wav" type="AudioStream" id=6]
[ext_resource path="res://Resources/Audio/Stop you violated the law.wav" type="AudioStream" id=7]
[ext_resource path="res://Characters/Player/Footsteps.gd" type="Script" id=8]
[ext_resource path="res://Resources/Audio/Step.wav" type="AudioStream" id=9]
[ext_resource path="res://Characters/Player/UI/UI.tscn" type="PackedScene" id=10]
[ext_resource path="res://Characters/Player/PillTaker.gd" type="Script" id=11]
[ext_resource path="res://Level/Interactables/Pills/Pills.tscn" type="PackedScene" id=12]
[ext_resource path="res://Characters/Player/Footsteps.gd" type="Script" id=7]
[ext_resource path="res://Resources/Audio/Step.wav" type="AudioStream" id=8]
[ext_resource path="res://Characters/Player/UI/UI.tscn" type="PackedScene" id=9]
[ext_resource path="res://Characters/Player/PillTaker.gd" type="Script" id=10]
[ext_resource path="res://Level/Interactables/Pills/Pills.tscn" type="PackedScene" id=11]
[sub_resource type="ViewportTexture" id=1]
viewport_path = NodePath("Body/PillCameras/MaskedView")
@ -35,7 +34,9 @@ shader_param/mask = ExtResource( 5 )
[sub_resource type="CylinderShape" id=5]
[sub_resource type="Animation" id=6]
[sub_resource type="CylinderShape" id=6]
[sub_resource type="Animation" id=7]
length = 0.8
loop = true
tracks/0/type = "value"
@ -68,7 +69,7 @@ tracks/1/keys = {
} ]
}
[sub_resource type="Animation" id=7]
[sub_resource type="Animation" id=8]
tracks/0/type = "value"
tracks/0/path = NodePath("PillTaker/Pills:visible")
tracks/0/interp = 1
@ -134,8 +135,7 @@ tracks/4/keys = {
} ]
}
[sub_resource type="Animation" id=8]
resource_name = "FadeOut"
[sub_resource type="Animation" id=9]
length = 2.0
tracks/0/type = "value"
tracks/0/path = NodePath(".:material:shader_param/cutoff")
@ -150,12 +150,10 @@ tracks/0/keys = {
"values": [ 1.0, 0.5, 0.7, 0.0 ]
}
[sub_resource type="AudioStreamRandomPitch" id=9]
audio_stream = ExtResource( 9 )
[sub_resource type="AudioStreamRandomPitch" id=10]
audio_stream = ExtResource( 8 )
random_pitch = 1.3
[sub_resource type="CylinderShape" id=10]
[node name="Player" type="KinematicBody" groups=[
"Player",
]]
@ -172,6 +170,7 @@ camera_nodepath = NodePath("Body/PillCameras")
[node name="Body" type="Spatial" parent="."]
[node name="PillCameras" type="Spatial" parent="Body"]
editor/display_folded = true
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0461721, 1.84617, 0 )
script = ExtResource( 2 )
@ -184,10 +183,10 @@ cast_to = Vector3( 0, 0, 2 )
current = true
[node name="TrueView" type="Viewport" parent="Body/PillCameras"]
editor/display_folded = true
size = Vector2( 1024, 600 )
render_target_update_mode = 3
audio_listener_enable_3d = true
shadow_atlas_size = 4
[node name="TrueCamera" type="Camera" parent="Body/PillCameras/TrueView"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0461721, 1.84617, 0 )
@ -195,10 +194,10 @@ cull_mask = 2
current = true
[node name="MaskedView" type="Viewport" parent="Body/PillCameras"]
editor/display_folded = true
size = Vector2( 1024, 600 )
render_target_update_mode = 3
audio_listener_enable_3d = true
shadow_atlas_size = 4
[node name="MaskedCamera" type="Camera" parent="Body/PillCameras/MaskedView"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0461721, 1.84617, 0 )
@ -226,24 +225,31 @@ remote_path = NodePath("../TrueView/TrueCamera")
remote_path = NodePath("../MaskedView/MaskedCamera")
[node name="Collider" type="CollisionShape" parent="."]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0 )
transform = Transform( 0.8, 0, 0, 0, 1, 0, 0, 0, 0.8, 0, 1, 0 )
shape = SubResource( 5 )
[node name="InteractArea" type="Area" parent="." groups=[
"Player",
]]
[node name="CollisionShape" type="CollisionShape" parent="InteractArea"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0 )
shape = SubResource( 6 )
[node name="WalkAnimationPlayer" type="AnimationPlayer" parent="."]
autoplay = "Walk"
anims/Walk = SubResource( 6 )
anims/Walk = SubResource( 7 )
[node name="PillAnimationPlayer" type="AnimationPlayer" parent="."]
playback_speed = 2.0
anims/PillTaking = SubResource( 7 )
anims/PillTaking = SubResource( 8 )
[node name="FadeOutAnimationPlayer" type="AnimationPlayer" parent="."]
root_node = NodePath("../Body/PillCameras/ScreenTextureFadeOut")
playback_speed = 2.0
anims/FadeOut = SubResource( 8 )
anims/FadeOut = SubResource( 9 )
[node name="AudioStreamPlayer3D" type="AudioStreamPlayer3D" parent="."]
stream = ExtResource( 7 )
[node name="Eating" type="Spatial" parent="."]
editor/display_folded = true
@ -252,28 +258,22 @@ editor/display_folded = true
stream = ExtResource( 6 )
[node name="Footsteps" type="Spatial" parent="."]
script = ExtResource( 8 )
script = ExtResource( 7 )
[node name="Footstep1" type="AudioStreamPlayer3D" parent="Footsteps"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1 )
stream = SubResource( 9 )
stream = SubResource( 10 )
unit_db = -25.0
pitch_scale = 1.5
[node name="HUD" parent="." instance=ExtResource( 10 )]
[node name="HUD" parent="." instance=ExtResource( 9 )]
[node name="PillTaker" type="Spatial" parent="."]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0 )
script = ExtResource( 11 )
script = ExtResource( 10 )
[node name="Pills" parent="PillTaker" instance=ExtResource( 12 )]
[node name="Pills" parent="PillTaker" instance=ExtResource( 11 )]
transform = Transform( 0.1, 0, 0, 0, -4.37114e-009, 0.1, 0, -0.1, -4.37114e-009, 0, 0.7, 0 )
visible = false
[node name="InteractArea" type="Area" parent="."]
[node name="CollisionShape" type="CollisionShape" parent="InteractArea"]
transform = Transform( 1.2, 0, 0, 0, 1, 0, 0, 0, 1.2, 0, 1, 0 )
shape = SubResource( 10 )
[editable path="HUD"]

View File

@ -26,7 +26,6 @@ func _ready():
func add_item (name):
Logger.info("Adding item \"" + name + "\" to inventory")
#TODO: global member for inventory?
var text
if name == "Key":
text = _keyTexture
@ -46,4 +45,5 @@ func _process(_delta):
_labelDayTime.text = "dayTime: " + String(val) + " - %02d:%02d" % [val/60%24, val%60]
_dayTime.value = Daytime.get_time()
_dayTimeVisual.rect_rotation = (val/_dayTime.max_value) * 360 #pivot offset x=67, y = 7
#_dayTimeVisual.rect_rotation = (val/_dayTime.max_value) * 360 #pivot offset x=67, y = 7
_dayTimeVisual.rect_rotation = (val/_dayTime.max_value) * 180

View File

@ -68,6 +68,7 @@ margin_left = 466.0
margin_top = -82.0
margin_right = 646.0
margin_bottom = 98.0
rect_rotation = 180.0
rect_pivot_offset = Vector2( 90, 90 )
texture = ExtResource( 4 )
expand = true

View File

@ -7,7 +7,6 @@ var _current_path_index
var _arrived_distance_threshold = 0.1
export(float) var speed = 8
export(NodePath) var body_nodepath
var navigation: Navigation
@ -48,7 +47,7 @@ func _process(delta):
var direction_normalized: Vector3 = (current_goal - _get_body_position()).normalized()
body.look_towards(direction_normalized)
body.move_towards(direction_normalized * speed)
body.move_towards(direction_normalized * body.speed)
# Returns the point we should currently be moving towards

View File

@ -0,0 +1,23 @@
extends NPC
var _interactArea: Area
func _ready():
#Logger.set_logger_level(Logger.LOG_LEVEL_FINE)
var _interactArea = get_node("InteractArea") as Area
assert(null != _interactArea)
_interactArea.connect("area_entered", self, "_on_area_entered")
func _process(_delta):
# TODO: movement
#if current_target: # should not be needed -> handled per navigation path
pass
func _on_area_entered (area: Area):
if area.is_in_group("FactoryEntry"):
# despawn
queue_free()
pass

View File

@ -0,0 +1,48 @@
[gd_scene load_steps=7 format=2]
[ext_resource path="res://Characters/Worker/Worker.gd" type="Script" id=1]
[sub_resource type="CylinderMesh" id=1]
top_radius = 0.8
[sub_resource type="CylinderMesh" id=2]
top_radius = 0.8
bottom_radius = 0.001
[sub_resource type="PrismMesh" id=3]
[sub_resource type="CylinderShape" id=4]
[sub_resource type="CylinderShape" id=5]
[node name="Worker" type="KinematicBody"]
script = ExtResource( 1 )
[node name="Meshes" type="Spatial" parent="."]
[node name="TrueAppearance" type="MeshInstance" parent="Meshes"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0 )
layers = 2
mesh = SubResource( 1 )
material/0 = null
[node name="MaskedAppearance" type="MeshInstance" parent="Meshes"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0 )
mesh = SubResource( 2 )
material/0 = null
[node name="MeshInstance" type="MeshInstance" parent="Meshes"]
transform = Transform( 0.1, 0, 0, 0, -4.37114e-009, 0.1, 0, -0.1, -4.37114e-009, 0, 1.8, -0.9 )
layers = 3
mesh = SubResource( 3 )
material/0 = null
[node name="Collider" type="CollisionShape" parent="."]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0 )
shape = SubResource( 4 )
[node name="InteractArea" type="Area" parent="."]
[node name="CollisionShape" type="CollisionShape" parent="InteractArea"]
transform = Transform( 1.2, 0, 0, 0, 1, 0, 0, 0, 1.2, 0, 1, 0 )
shape = SubResource( 5 )

View File

@ -1,9 +1,12 @@
extends Node
const _increase_per_second: float = 0.0 #0.5
const _max: int = 1440 # 24 hour + 60 mins
const WORK_TIME = _max * 0.3
const SLEEP_TIME = _max * 0.6
var _time: float setget _set_time, get_time
var increase_per_second: float = 5.0
signal respawn
@ -22,7 +25,7 @@ func get_max () -> int:
func _process (delta: float) -> void:
# continually increases daytime
_set_time(_time + _increase_per_second * delta)
_set_time(_time + increase_per_second * delta)
if _time >= _max:
_time = 0
emit_signal("respawn")

View File

@ -3,7 +3,7 @@ extends Node
var _level: float setget _set_level, get_level
var _min: float = 0.0
var _max: float = 7.0
var _max: float = 6.0
var _decrease_per_second: float = 0.2
var _pill_add_amount: float = 2.0

View File

@ -0,0 +1,52 @@
[gd_scene load_steps=4 format=2]
[ext_resource path="res://Level/Interactables/Door/Door.tscn" type="PackedScene" id=1]
[sub_resource type="CubeMesh" id=1]
[sub_resource type="BoxShape" id=2]
[node name="DoorWall" type="Spatial"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 2 )
[node name="WallPart1" type="StaticBody" parent="."]
editor/display_folded = true
transform = Transform( 2, 0, 0, 0, 1.5, 0, 0, 0, 0.2, -4, 1.5, 0 )
collision_layer = 3
[node name="MeshInstance" type="MeshInstance" parent="WallPart1"]
layers = 3
mesh = SubResource( 1 )
material/0 = null
[node name="CollisionShape" type="CollisionShape" parent="WallPart1"]
shape = SubResource( 2 )
[node name="WallPart2" type="StaticBody" parent="."]
editor/display_folded = true
transform = Transform( 3, 0, 0, 0, 1.5, 0, 0, 0, 0.2, 3, 1.5, 0 )
collision_layer = 3
[node name="MeshInstance" type="MeshInstance" parent="WallPart2"]
layers = 3
mesh = SubResource( 1 )
material/0 = null
[node name="CollisionShape" type="CollisionShape" parent="WallPart2"]
shape = SubResource( 2 )
[node name="WallPart3" type="StaticBody" parent="."]
editor/display_folded = true
transform = Transform( 6, 0, 0, 0, 1, 0, 0, 0, 0.2, 0, 4, 0 )
collision_layer = 3
[node name="MeshInstance" type="MeshInstance" parent="WallPart3"]
layers = 3
mesh = SubResource( 1 )
material/0 = null
[node name="CollisionShape" type="CollisionShape" parent="WallPart3"]
shape = SubResource( 2 )
[node name="Door" parent="." instance=ExtResource( 1 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -2, 1.5, 0 )

View File

@ -0,0 +1,56 @@
[gd_scene load_steps=4 format=2]
[ext_resource path="res://Level/Interactables/Door/Door.tscn" type="PackedScene" id=1]
[sub_resource type="CubeMesh" id=1]
[sub_resource type="BoxShape" id=2]
[node name="DoubleDoorWall" type="Spatial"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 2 )
[node name="WallPart1" type="StaticBody" parent="."]
editor/display_folded = true
transform = Transform( 2, 0, 0, 0, 1.5, 0, 0, 0, 0.2, -4, 1.5, 0 )
collision_layer = 3
[node name="MeshInstance" type="MeshInstance" parent="WallPart1"]
layers = 3
mesh = SubResource( 1 )
material/0 = null
[node name="CollisionShape" type="CollisionShape" parent="WallPart1"]
shape = SubResource( 2 )
[node name="WallPart2" type="StaticBody" parent="."]
editor/display_folded = true
transform = Transform( 2, 0, 0, 0, 1.5, 0, 0, 0, 0.2, 4, 1.5, 0 )
collision_layer = 3
[node name="MeshInstance" type="MeshInstance" parent="WallPart2"]
layers = 3
mesh = SubResource( 1 )
material/0 = null
[node name="CollisionShape" type="CollisionShape" parent="WallPart2"]
shape = SubResource( 2 )
[node name="WallPart3" type="StaticBody" parent="."]
editor/display_folded = true
transform = Transform( 6, 0, 0, 0, 1, 0, 0, 0, 0.2, 0, 4, 0 )
collision_layer = 3
[node name="MeshInstance" type="MeshInstance" parent="WallPart3"]
layers = 3
mesh = SubResource( 1 )
material/0 = null
[node name="CollisionShape" type="CollisionShape" parent="WallPart3"]
shape = SubResource( 2 )
[node name="Door" parent="." instance=ExtResource( 1 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -2, 1.5, 0 )
[node name="Door2" parent="." instance=ExtResource( 1 )]
transform = Transform( -1, 0, -8.74228e-008, 0, 1, 0, 8.74228e-008, 0, -1, 2, 1.5, 0 )
invert_open = true

View File

@ -1,18 +1,28 @@
[gd_scene load_steps=2 format=2]
[gd_scene load_steps=4 format=2]
[ext_resource path="res://Level/Interactables/Door/Door.tscn" type="PackedScene" id=1]
[sub_resource type="CylinderMesh" id=1]
top_radius = 20.0
bottom_radius = 35.0
height = 100.0
[sub_resource type="BoxShape" id=2]
[node name="Factory" type="Spatial"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -185, 0, -191 )
[node name="MeshInstance" type="MeshInstance" parent="."]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 50, 0 )
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.00691223, 50, 0.124863 )
mesh = SubResource( 1 )
material/0 = null
[node name="DoorLeft" parent="MeshInstance" instance=ExtResource( 1 )]
transform = Transform( -2.18557e-007, 0, 1, 0, 5, 0, -5, 0, -4.37114e-008, 35.308, -42, 8.857 )
[node name="DoorRight" parent="MeshInstance" instance=ExtResource( 1 )]
transform = Transform( -2.18557e-007, 0, -1, 0, 5, 0, 5, 0, -4.37114e-008, 35.37, -42, -11.118 )
[node name="MeshInstance2" type="MeshInstance" parent="."]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 30, 50, 60 )
mesh = SubResource( 1 )
@ -22,3 +32,12 @@ material/0 = null
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 30, 50, -60 )
mesh = SubResource( 1 )
material/0 = null
[node name="FactoryEntry" type="Area" parent="." groups=[
"FactoryEntry",
]]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 50.9938, 0, 0 )
[node name="CollisionShape" type="CollisionShape" parent="FactoryEntry"]
transform = Transform( 15.5705, 0, 0, 0, 1, 0, 0, 0, 25.0132, -18.0871, 0, 0 )
shape = SubResource( 2 )

View File

@ -18,14 +18,17 @@ mid_height = 2.0
[node name="CSGMesh" type="CSGMesh" parent="."]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 0 )
layers = 3
mesh = SubResource( 2 )
[node name="CSGMesh2" type="CSGMesh" parent="CSGMesh"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0.00447488, -1, -0.00174999 )
layers = 3
operation = 2
mesh = SubResource( 3 )
[node name="CSGMesh3" type="CSGMesh" parent="CSGMesh"]
transform = Transform( 1, 0, 0, 0, -0.0161161, -0.99987, 0, 0.99987, -0.0161161, 0, -4.59426, -5.98218 )
layers = 3
operation = 2
mesh = SubResource( 4 )

View File

@ -1,77 +1,47 @@
[gd_scene load_steps=7 format=2]
[ext_resource path="res://Level/Interactables/Door/Door.tscn" type="PackedScene" id=1]
[ext_resource path="res://Characters/Player/Player.tscn" type="PackedScene" id=2]
[ext_resource path="res://Level/Buildings/DoubleDoorWall.tscn" type="PackedScene" id=1]
[ext_resource path="res://Level/Buildings/DoorWall.tscn" type="PackedScene" id=2]
[ext_resource path="res://Characters/Player/Player.tscn" type="PackedScene" id=3]
[sub_resource type="CubeMesh" id=4]
[sub_resource type="BoxShape" id=1]
[sub_resource type="BoxShape" id=5]
[sub_resource type="CubeMesh" id=2]
[sub_resource type="BoxShape" id=6]
[sub_resource type="CubeMesh" id=7]
[sub_resource type="BoxShape" id=3]
[node name="InFactory" type="Spatial"]
[node name="Architecture" type="Spatial" parent="."]
[node name="EntryHall" type="Spatial" parent="Architecture"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 2 )
editor/display_folded = true
[node name="WallPart1" type="StaticBody" parent="Architecture/EntryHall"]
transform = Transform( 2, 0, 0, 0, 1.5, 0, 0, 0, 0.2, -4, 1.5, 0 )
collision_layer = 3
[node name="DoubleDoorWall" parent="Architecture/EntryHall" instance=ExtResource( 1 )]
[node name="MeshInstance" type="MeshInstance" parent="Architecture/EntryHall/WallPart1"]
layers = 3
mesh = SubResource( 4 )
material/0 = null
[node name="CollisionShape" type="CollisionShape" parent="Architecture/EntryHall/WallPart1"]
shape = SubResource( 5 )
[node name="WallPart2" type="StaticBody" parent="Architecture/EntryHall"]
transform = Transform( 2, 0, 0, 0, 1.5, 0, 0, 0, 0.2, 4, 1.5, 0 )
collision_layer = 3
[node name="MeshInstance" type="MeshInstance" parent="Architecture/EntryHall/WallPart2"]
layers = 3
mesh = SubResource( 4 )
material/0 = null
[node name="CollisionShape" type="CollisionShape" parent="Architecture/EntryHall/WallPart2"]
shape = SubResource( 5 )
[node name="WallPart3" type="StaticBody" parent="Architecture/EntryHall"]
transform = Transform( 6, 0, 0, 0, 1, 0, 0, 0, 0.2, 0, 4, 0 )
collision_layer = 3
[node name="MeshInstance" type="MeshInstance" parent="Architecture/EntryHall/WallPart3"]
layers = 3
mesh = SubResource( 4 )
material/0 = null
[node name="CollisionShape" type="CollisionShape" parent="Architecture/EntryHall/WallPart3"]
shape = SubResource( 5 )
[node name="Door" parent="Architecture/EntryHall" instance=ExtResource( 1 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -2, 1.5, 0 )
[node name="Door2" parent="Architecture/EntryHall" instance=ExtResource( 1 )]
transform = Transform( -1, 0, -8.74228e-008, 0, 1, 0, 8.74228e-008, 0, -1, 2, 1.5, 0 )
invert_open = true
[node name="DoorWall" parent="Architecture/EntryHall" instance=ExtResource( 2 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -12, 0, 2 )
[node name="Floor" type="StaticBody" parent="Architecture"]
editor/display_folded = true
transform = Transform( 100, 0, 0, 0, 1, 0, 0, 0, 100, 0, -1, 0 )
collision_layer = 3
[node name="CollisionShape" type="CollisionShape" parent="Architecture/Floor"]
shape = SubResource( 6 )
shape = SubResource( 1 )
[node name="MeshInstance" type="MeshInstance" parent="Architecture/Floor"]
layers = 3
mesh = SubResource( 7 )
mesh = SubResource( 2 )
material/0 = null
[node name="Player" parent="." instance=ExtResource( 2 )]
[node name="OutsideEntry" type="Area" parent="Architecture" groups=[
"OutsideEntry",
]]
[node name="CollisionShape" type="CollisionShape" parent="Architecture/OutsideEntry"]
transform = Transform( 6.4742, 0, 0, 0, 1, 0, 0, 0, 4.02915, -24.461, 0, 2.21844 )
shape = SubResource( 3 )
[node name="Player" parent="." instance=ExtResource( 3 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 4, 0 )

271
Level/Labyrinth.tscn Normal file
View File

@ -0,0 +1,271 @@
[gd_scene load_steps=14 format=2]
[ext_resource path="res://Level/Labyrinth/LabyrinthCorridorTrue.tscn" type="PackedScene" id=1]
[ext_resource path="res://Level/Labyrinth/LabyrinthCrossing.tscn" type="PackedScene" id=2]
[ext_resource path="res://Level/Labyrinth/LabyrinthCorridorMasked.tscn" type="PackedScene" id=3]
[ext_resource path="res://Characters/Player/Player.tscn" type="PackedScene" id=4]
[sub_resource type="PlaneMesh" id=1]
size = Vector2( 130, 8 )
[sub_resource type="ConvexPolygonShape" id=2]
points = PoolVector3Array( 65, 0, 4, -65, 0, 4, 65, 0, -4, -65, 0, -4 )
[sub_resource type="ConvexPolygonShape" id=3]
points = PoolVector3Array( 65, 0, 4, -65, 0, 4, 65, 0, -4, -65, 0, -4 )
[sub_resource type="ConvexPolygonShape" id=4]
points = PoolVector3Array( 65, 0, 4, -65, 0, 4, 65, 0, -4, -65, 0, -4 )
[sub_resource type="ConvexPolygonShape" id=5]
points = PoolVector3Array( 65, 0, 4, -65, 0, 4, 65, 0, -4, -65, 0, -4 )
[sub_resource type="ConvexPolygonShape" id=6]
points = PoolVector3Array( 65, 0, 4, -65, 0, 4, 65, 0, -4, -65, 0, -4 )
[sub_resource type="ConvexPolygonShape" id=7]
points = PoolVector3Array( 65, 0, 4, -65, 0, 4, 65, 0, -4, -65, 0, -4 )
[sub_resource type="ConvexPolygonShape" id=8]
points = PoolVector3Array( 65, 0, 4, -65, 0, 4, 65, 0, -4, -65, 0, -4 )
[sub_resource type="Environment" id=9]
ambient_light_color = Color( 0.290196, 0, 0, 1 )
[node name="Labyrinth" type="Spatial"]
[node name="LabyrinthCorridorTrue" parent="." instance=ExtResource( 1 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 15, 0, 0 )
[node name="LabyrinthCorridorTrue2" parent="." instance=ExtResource( 1 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -15, 0, 0 )
[node name="LabyrinthCorridorTrue3" parent="." instance=ExtResource( 1 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -15, 0, 0 )
[node name="LabyrinthCorridorTrue4" parent="." instance=ExtResource( 1 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -15, 0, 0 )
[node name="LabyrinthCorridorTrue11" parent="." instance=ExtResource( 1 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -15, 0, -60 )
[node name="LabyrinthCorridorTrue9" parent="." instance=ExtResource( 1 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -45, 0, 30 )
[node name="LabyrinthCorridorTrue13" parent="." instance=ExtResource( 1 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -105, 0, 30 )
[node name="LabyrinthCorridorTrue16" parent="." instance=ExtResource( 1 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -75, 0, -30 )
[node name="LabyrinthCorridorTrue5" parent="." instance=ExtResource( 1 )]
transform = Transform( -4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 0, 0, 15 )
[node name="LabyrinthCorridorTrue6" parent="." instance=ExtResource( 1 )]
transform = Transform( -4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -30, 0, -15 )
[node name="LabyrinthCorridorTrue17" parent="." instance=ExtResource( 1 )]
transform = Transform( -4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -90, 0, -15 )
[node name="LabyrinthCorridorTrue18" parent="." instance=ExtResource( 1 )]
transform = Transform( -4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -90, 0, 15 )
[node name="LabyrinthCorridorTrue8" parent="." instance=ExtResource( 1 )]
transform = Transform( -4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -30, 0, -45 )
[node name="LabyrinthCorridorTrue12" parent="." instance=ExtResource( 1 )]
transform = Transform( -4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -60, 0, -45 )
[node name="LabyrinthCorridorTrue10" parent="." instance=ExtResource( 1 )]
transform = Transform( -4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 0, 0, -45 )
[node name="LabyrinthCorridorTrue7" parent="." instance=ExtResource( 1 )]
transform = Transform( -4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -30, 0, 15 )
[node name="LabyrinthCrossing" parent="." instance=ExtResource( 2 )]
[node name="LabyrinthCrossing3" parent="." instance=ExtResource( 2 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -30, 0, 0 )
[node name="LabyrinthCrossing6" parent="." instance=ExtResource( 2 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -30, 0, 30 )
[node name="LabyrinthCrossing7" parent="." instance=ExtResource( 2 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -60, 0, 30 )
[node name="LabyrinthCrossing15" parent="." instance=ExtResource( 2 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -90, 0, 30 )
[node name="LabyrinthCrossing11" parent="." instance=ExtResource( 2 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -60, 0, 0 )
[node name="LabyrinthCrossing17" parent="." instance=ExtResource( 2 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -90, 0, 0 )
[node name="LabyrinthCrossing13" parent="." instance=ExtResource( 2 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -60, 0, -60 )
[node name="LabyrinthCrossing14" parent="." instance=ExtResource( 2 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -90, 0, -60 )
[node name="LabyrinthCrossing2" parent="." instance=ExtResource( 2 )]
[node name="LabyrinthCrossing22" parent="." instance=ExtResource( 2 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 30, 0, 0 )
[node name="LabyrinthCrossing5" parent="." instance=ExtResource( 2 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -30, 0, -30 )
[node name="LabyrinthCrossing12" parent="." instance=ExtResource( 2 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -60, 0, -30 )
[node name="LabyrinthCrossing16" parent="." instance=ExtResource( 2 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -90, 0, -30 )
[node name="LabyrinthCrossing8" parent="." instance=ExtResource( 2 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -30, 0, -60 )
[node name="LabyrinthCrossing9" parent="." instance=ExtResource( 2 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -60 )
[node name="LabyrinthCrossing10" parent="." instance=ExtResource( 2 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -30 )
[node name="LabyrinthCrossing4" parent="." instance=ExtResource( 2 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30 )
[node name="LabyrinthCorridorMasked" parent="." instance=ExtResource( 3 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -45, 0, 0 )
[node name="LabyrinthCorridorMasked5" parent="." instance=ExtResource( 3 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -75, 0, 0 )
[node name="LabyrinthCorridorMasked6" parent="." instance=ExtResource( 3 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -75, 0, 30 )
[node name="LabyrinthCorridorMasked7" parent="." instance=ExtResource( 3 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -15, 0, 30 )
[node name="LabyrinthCorridorMasked4" parent="." instance=ExtResource( 3 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -45, 0, -30 )
[node name="LabyrinthCorridorMasked12" parent="." instance=ExtResource( 3 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -15, 0, -30 )
[node name="LabyrinthCorridorMasked9" parent="." instance=ExtResource( 3 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -45, 0, -60 )
[node name="LabyrinthCorridorMasked10" parent="." instance=ExtResource( 3 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -75, 0, -60 )
[node name="LabyrinthCorridorMasked11" parent="." instance=ExtResource( 3 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -105, 0, -60 )
[node name="LabyrinthCorridorMasked2" parent="." instance=ExtResource( 3 )]
transform = Transform( -4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -60, 0, 15 )
[node name="LabyrinthCorridorMasked3" parent="." instance=ExtResource( 3 )]
transform = Transform( -4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -60, 0, -15 )
[node name="LabyrinthCorridorMasked13" parent="." instance=ExtResource( 3 )]
transform = Transform( -4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -90, 0, -45 )
[node name="LabyrinthCorridorMasked8" parent="." instance=ExtResource( 3 )]
transform = Transform( -4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 0, 0, -15 )
[node name="Player" parent="." instance=ExtResource( 4 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 30, 2, 0 )
IsInLabyrinth = true
[node name="OuterWalls" type="Spatial" parent="."]
[node name="MeshInstance" type="MeshInstance" parent="OuterWalls"]
transform = Transform( -1, -8.74228e-08, 3.82137e-15, 0, -4.37114e-08, -1, 8.74228e-08, -1, 4.37114e-08, -50, 5, 35 )
layers = 3
mesh = SubResource( 1 )
material/0 = null
[node name="StaticBody" type="StaticBody" parent="OuterWalls/MeshInstance"]
[node name="CollisionShape" type="CollisionShape" parent="OuterWalls/MeshInstance/StaticBody"]
shape = SubResource( 2 )
[node name="MeshInstance2" type="MeshInstance" parent="OuterWalls"]
transform = Transform( 1, 1.74846e-07, -7.64274e-15, 0, -4.37114e-08, -1, -1.74846e-07, 1, -4.37114e-08, -50, 5, -65 )
layers = 3
mesh = SubResource( 1 )
material/0 = null
[node name="StaticBody" type="StaticBody" parent="OuterWalls/MeshInstance2"]
[node name="CollisionShape" type="CollisionShape" parent="OuterWalls/MeshInstance2/StaticBody"]
shape = SubResource( 3 )
[node name="MeshInstance3" type="MeshInstance" parent="OuterWalls"]
transform = Transform( 1.31134e-07, -1, 4.37114e-08, 0, -4.37114e-08, -1, 1, 1.31134e-07, -5.73206e-15, 4.99999, 5, -70 )
layers = 3
mesh = SubResource( 1 )
material/0 = null
[node name="StaticBody" type="StaticBody" parent="OuterWalls/MeshInstance3"]
[node name="CollisionShape" type="CollisionShape" parent="OuterWalls/MeshInstance3/StaticBody"]
shape = SubResource( 4 )
[node name="MeshInstance4" type="MeshInstance" parent="OuterWalls"]
transform = Transform( 1.31134e-07, -1, 4.37114e-08, 0, -4.37114e-08, -1, 1, 1.31134e-07, -5.73206e-15, 4.99999, 5, 70 )
layers = 3
mesh = SubResource( 1 )
material/0 = null
[node name="StaticBody" type="StaticBody" parent="OuterWalls/MeshInstance4"]
[node name="CollisionShape" type="CollisionShape" parent="OuterWalls/MeshInstance4/StaticBody"]
shape = SubResource( 5 )
[node name="MeshInstance5" type="MeshInstance" parent="OuterWalls"]
transform = Transform( 1.31134e-07, -1, 4.37114e-08, 0, -4.37114e-08, -1, 1, 1.31134e-07, -5.73206e-15, 35, 5, -7.62939e-06 )
layers = 3
mesh = SubResource( 1 )
material/0 = null
[node name="StaticBody" type="StaticBody" parent="OuterWalls/MeshInstance5"]
[node name="CollisionShape" type="CollisionShape" parent="OuterWalls/MeshInstance5/StaticBody"]
shape = SubResource( 6 )
[node name="MeshInstance8" type="MeshInstance" parent="OuterWalls"]
transform = Transform( -7.98311e-08, 1, -4.37114e-08, 0, -4.37114e-08, -1, -0.49, -1.62921e-07, 7.12149e-15, -95, 5, -15 )
layers = 3
mesh = SubResource( 1 )
material/0 = null
[node name="StaticBody" type="StaticBody" parent="OuterWalls/MeshInstance8"]
[node name="CollisionShape" type="CollisionShape" parent="OuterWalls/MeshInstance8/StaticBody"]
shape = SubResource( 6 )
[node name="MeshInstance6" type="MeshInstance" parent="OuterWalls"]
transform = Transform( -1, -8.74228e-08, 3.82137e-15, 0, -4.37114e-08, -1, 8.74228e-08, -1, 4.37114e-08, 75, 5, 4.99999 )
layers = 3
mesh = SubResource( 1 )
material/0 = null
[node name="StaticBody" type="StaticBody" parent="OuterWalls/MeshInstance6"]
[node name="CollisionShape" type="CollisionShape" parent="OuterWalls/MeshInstance6/StaticBody"]
shape = SubResource( 7 )
[node name="MeshInstance7" type="MeshInstance" parent="OuterWalls"]
transform = Transform( 1, 1.74846e-07, -7.64274e-15, 0, -4.37114e-08, -1, -1.74846e-07, 1, -4.37114e-08, 75, 5, -5.00001 )
layers = 3
mesh = SubResource( 1 )
material/0 = null
[node name="StaticBody" type="StaticBody" parent="OuterWalls/MeshInstance7"]
[node name="CollisionShape" type="CollisionShape" parent="OuterWalls/MeshInstance7/StaticBody"]
shape = SubResource( 8 )
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = SubResource( 9 )

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,19 @@
[gd_scene load_steps=2 format=2]
[ext_resource path="res://Level/Labyrinth/LabyrinthCorridorMasked.tscn" type="PackedScene" id=1]
[node name="LabyrinthCorridorTrue" instance=ExtResource( 1 )]
[node name="TrueMesh" parent="." index="0"]
layers = 2
[node name="StaticBody" parent="TrueMesh" index="0"]
collision_layer = 2
collision_mask = 2
[node name="MaskedMesh" parent="." index="1"]
layers = 1
[node name="StaticBody" parent="MaskedMesh" index="0"]
collision_layer = 1
collision_mask = 1

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,6 @@
[gd_resource type="SpatialMaterial" format=2]
[resource]
params_cull_mode = 2
metallic = 0.65
roughness = 0.71

21
Level/WorkerSpawner.gd Normal file
View File

@ -0,0 +1,21 @@
extends Spatial
const SPAWN_TIME_MIN = 3000 # min spawntime in ms
const SPAWN_TIME_MAX = 7000 # max spawntime in ms
var _worker
var _lastSpawn = 0 # timestamp of last spawned worker
func _ready():
_worker = load("res://Characters/Worker/Worker.tscn")
assert(null != _worker)
func _process(delta):
# spawns new workers after defined time
var cur_time = OS.get_ticks_msec()
var diff = rand_range(SPAWN_TIME_MIN, SPAWN_TIME_MAX)
if cur_time - _lastSpawn > diff:
#Logger.info(name + " spawning new worker")
var new_worker = _worker.instance()
add_child(new_worker)
_lastSpawn = cur_time

View File

@ -1,18 +1,19 @@
[gd_scene load_steps=21 format=2]
[gd_scene load_steps=22 format=2]
[ext_resource path="res://Characters/Player/Player.tscn" type="PackedScene" id=1]
[ext_resource path="res://Level/Interactables/Keycard/Keycard.tscn" type="PackedScene" id=2]
[ext_resource path="res://Level/Interactables/Key/Key.tscn" type="PackedScene" id=3]
[ext_resource path="res://Level/Interactables/Door/Door.tscn" type="PackedScene" id=4]
[ext_resource path="res://Level/Interactables/Lever/Lever.tscn" type="PackedScene" id=5]
[ext_resource path="res://Level/Buildings/PlayerHouse.tscn" type="PackedScene" id=6]
[ext_resource path="res://Level/Buildings/BuildingBlock.tscn" type="PackedScene" id=7]
[ext_resource path="res://Level/Buildings/MeldewesenHome.tscn" type="PackedScene" id=8]
[ext_resource path="res://Level/Buildings/Factory.tscn" type="PackedScene" id=9]
[ext_resource path="res://Util/NodeGroupNotifier.tscn" type="PackedScene" id=10]
[ext_resource path="res://Characters/Util/PathNavigatorForNPC.tscn" type="PackedScene" id=11]
[ext_resource path="res://Characters/Meldewesen/Meldewesen.tscn" type="PackedScene" id=12]
[ext_resource path="res://Util/AmbiencePlayer.tscn" type="PackedScene" id=13]
[ext_resource path="res://Characters/Meldewesen/Meldewesen.tscn" type="PackedScene" id=2]
[ext_resource path="res://Level/Interactables/Keycard/Keycard.tscn" type="PackedScene" id=3]
[ext_resource path="res://Level/Interactables/Key/Key.tscn" type="PackedScene" id=4]
[ext_resource path="res://Level/WorkerSpawner.gd" type="Script" id=5]
[ext_resource path="res://Level/Interactables/Lever/Lever.tscn" type="PackedScene" id=6]
[ext_resource path="res://Level/Buildings/PlayerHouse.tscn" type="PackedScene" id=7]
[ext_resource path="res://Level/Buildings/BuildingBlock.tscn" type="PackedScene" id=8]
[ext_resource path="res://Level/Buildings/MeldewesenHome.tscn" type="PackedScene" id=9]
[ext_resource path="res://Level/Buildings/Factory.tscn" type="PackedScene" id=10]
[ext_resource path="res://Level/Buildings/DoorWall.tscn" type="PackedScene" id=11]
[ext_resource path="res://Util/NodeGroupNotifier.tscn" type="PackedScene" id=12]
[ext_resource path="res://Characters/Util/PathNavigatorForNPC.tscn" type="PackedScene" id=13]
[ext_resource path="res://Util/AmbiencePlayer.tscn" type="PackedScene" id=14]
[sub_resource type="BoxShape" id=1]
@ -44,19 +45,34 @@ _data = {
[node name="Player" parent="." instance=ExtResource( 1 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 14, 0, 7 )
[node name="Enemies" type="Node" parent="."]
[node name="Meldewesen2" parent="Enemies" instance=ExtResource( 2 )]
transform = Transform( -4.37114e-008, 0, -1, 0, 1, 0, 1, 0, -4.37114e-008, -3.88156, 0, 14.5424 )
_visibility_path = NodePath("../../Enemies/Meldewesen2/Visibility")
[node name="Meldewesen3" parent="Enemies" instance=ExtResource( 2 )]
transform = Transform( -1, 0, -8.74228e-008, 0, 1, 0, 8.74228e-008, 0, -1, 58.4396, 0, -200.412 )
_visibility_path = NodePath("../../Enemies/Meldewesen2/Visibility")
[node name="Meldewesen4" parent="Enemies" instance=ExtResource( 2 )]
transform = Transform( -4.37114e-008, 0, -1, 0, 1, 0, 1, 0, -4.37114e-008, -13.0581, 0, -67.0506 )
_visibility_path = NodePath("../../Enemies/Meldewesen2/Visibility")
[node name="Collectibles" type="Spatial" parent="."]
transform = Transform( -4.37114e-008, 0, 1, 0, 1, 0, -1, 0, -4.37114e-008, 15.0831, 1.63203, 13.0809 )
[node name="Keycard" parent="Collectibles" groups=[
"Collectibles",
] instance=ExtResource( 2 )]
] instance=ExtResource( 3 )]
transform = Transform( -4.37114e-008, 0, 1, 0, 1, 0, -1, 0, -4.37114e-008, 203.861, -0.63203, 110.591 )
card_lvl = 1
[node name="Key" parent="Collectibles" groups=[
"Collectibles",
] instance=ExtResource( 3 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -75.0183, 0, -2.86102e-006 )
] instance=ExtResource( 4 )]
editor/display_folded = true
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -77.5603, 0, -1.90735e-006 )
key_id = 1
[node name="Area" type="Area" parent="Collectibles/Key" groups=[
@ -67,181 +83,208 @@ key_id = 1
transform = Transform( 15, 0, 0, 0, 1, 0, 0, 0, 15, 0, 0, 0 )
shape = SubResource( 1 )
[node name="Touchables" type="Spatial" parent="."]
[node name="WorkerSpawner" type="Node" parent="."]
editor/display_folded = true
[node name="Door" parent="Touchables" instance=ExtResource( 4 )]
transform = Transform( -4.37114e-008, 0, -1, 0, 1, 0, 1, 0, -4.37114e-008, 73.152, 2, -191.228 )
door_lvl = 1
[node name="WorkerSpawner" type="Spatial" parent="WorkerSpawner"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 3.20278, 0, -43.032 )
script = ExtResource( 5 )
[node name="Lever" parent="Touchables" instance=ExtResource( 5 )]
[node name="WorkerSpawner2" type="Spatial" parent="WorkerSpawner"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -4.36571, 0, -102.743 )
script = ExtResource( 5 )
[node name="WorkerSpawner3" type="Spatial" parent="WorkerSpawner"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -4.36571, 0, 52.7015 )
script = ExtResource( 5 )
[node name="WorkerSpawner4" type="Spatial" parent="WorkerSpawner"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 69.6766, 0, -136.624 )
script = ExtResource( 5 )
[node name="WorkerSpawner5" type="Spatial" parent="WorkerSpawner"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -15.3518, 0, -202.564 )
script = ExtResource( 5 )
[node name="Touchables" type="Spatial" parent="."]
[node name="Lever" parent="Touchables" instance=ExtResource( 6 )]
transform = Transform( 1.19249e-008, 0, -1, 0, 1, 0, 1, 0, 1.19249e-008, 5.94476, 2, 11.731 )
[node name="NavigationMeshInstance" type="NavigationMeshInstance" parent="."]
navmesh = SubResource( 2 )
[node name="PlayerHouse" parent="NavigationMeshInstance" instance=ExtResource( 6 )]
[node name="PlayerHouse" parent="NavigationMeshInstance" instance=ExtResource( 7 )]
transform = Transform( -4.37114e-008, 0, 1, 0, 1, 0, -1, 0, -4.37114e-008, 13, 0, 14 )
[node name="MeldewesenHouse" parent="NavigationMeshInstance" instance=ExtResource( 7 )]
transform = Transform( 0.8, 0, 0, 0, 1, 0, 0, 0, 1, 14.9197, 0, 89.983 )
[node name="BuildingBlocks" type="Spatial" parent="NavigationMeshInstance"]
editor/display_folded = true
[node name="BuildingBlock" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 7 )]
[node name="BuildingBlock" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( -4.37114e-008, 0, 1, 0, 1, 0, -1, 0, -4.37114e-008, -13, 0, -13 )
[node name="BuildingBlock2" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 7 )]
[node name="BuildingBlock2" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( -4.37114e-008, 0, 1, 0, 1, 0, -1, 0, -4.37114e-008, 13, 0, -13 )
[node name="BuildingBlock11" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 7 )]
[node name="BuildingBlock11" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( -4.37114e-008, 0, 1, 0, 1, 0, -1, 0, -4.37114e-008, 13, 0, 41 )
[node name="BuildingBlock12" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 7 )]
[node name="BuildingBlock12" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( -4.37114e-008, 0, 1, 0, 1, 0, -1, 0, -4.37114e-008, -13, 0, 14 )
[node name="BuildingBlock13" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 7 )]
[node name="BuildingBlock13" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( -4.37114e-008, 0, 1, 0, 1, 0, -1, 0, -4.37114e-008, -13, 0, 41 )
[node name="BuildingBlock14" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 7 )]
[node name="BuildingBlock14" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 34, 0, 47 )
[node name="BuildingBlock15" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 7 )]
[node name="BuildingBlock15" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( -4.37114e-008, 0, -1, 0, 1, 0, 1, 0, -4.37114e-008, 41, 0, 95 )
[node name="BuildingBlock21" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 7 )]
[node name="BuildingBlock21" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( -4.37114e-008, 0, -1, 0, 1, 0, 1, 0, -4.37114e-008, 41, 0, 68 )
[node name="BuildingBlock16" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 7 )]
[node name="BuildingBlock16" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( -4.37114e-008, 0, -1, 0, 1, 0, 1, 0, -4.37114e-008, -13, 0, 68 )
[node name="BuildingBlock20" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 7 )]
[node name="BuildingBlock20" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( -4.37114e-008, 0, -1, 0, 1, 0, 1, 0, -4.37114e-008, -13, 0, 95 )
[node name="BuildingBlock17" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 7 )]
[node name="BuildingBlock17" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( -1, 0, 8.74228e-008, 0, 1, 0, -8.74228e-008, 0, -1, 8, 0, 116 )
[node name="BuildingBlock18" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 7 )]
[node name="BuildingBlock18" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( -1, 0, 8.74228e-008, 0, 1, 0, -8.74228e-008, 0, -1, 35, 0, 116 )
[node name="BuildingBlock3" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 7 )]
[node name="BuildingBlock3" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( -4.37114e-008, 0, 1, 0, 1, 0, -1, 0, -4.37114e-008, 13, 0, -40 )
[node name="BuildingBlock4" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 7 )]
[node name="BuildingBlock4" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( -4.37114e-008, 0, 1, 0, 1, 0, -1, 0, -4.37114e-008, -13, 0, -40 )
[node name="BuildingBlock5" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 7 )]
[node name="BuildingBlock5" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -34, 0, -88 )
[node name="BuildingBlock10" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 7 )]
[node name="BuildingBlock10" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -34, 0, -46 )
[node name="BuildingBlock9" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 7 )]
[node name="BuildingBlock9" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( -4.37114e-008, 0, 1, 0, 1, 0, -1, 0, -4.37114e-008, -13, 0, -94 )
[node name="BuildingBlock24" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 7 )]
[node name="BuildingBlock24" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( -4.37114e-008, 0, 1, 0, 1, 0, -1, 0, -4.37114e-008, -13, 0, -121 )
[node name="BuildingBlock25" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 7 )]
[node name="BuildingBlock25" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 8, 0, -127 )
[node name="BuildingBlock26" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 7 )]
[node name="BuildingBlock26" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 35, 0, -127 )
[node name="BuildingBlock31" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 7 )]
[node name="BuildingBlock31" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 35, 0, -169 )
[node name="BuildingBlock37" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 7 )]
[node name="BuildingBlock37" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 100, 0, -169 )
[node name="BuildingBlock38" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 7 )]
[node name="BuildingBlock38" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 127, 0, -169 )
[node name="BuildingBlock40" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 7 )]
[node name="BuildingBlock40" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 127, 0, -211 )
[node name="BuildingBlock41" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 7 )]
[node name="BuildingBlock41" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 100, 0, -211 )
[node name="BuildingBlock42" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 7 )]
[node name="BuildingBlock42" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 73, 0, -211 )
[node name="BuildingBlock43" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 7 )]
[node name="BuildingBlock53" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( -4.37114e-008, 0, 1, 0, 1, 0, -1, 0, -4.37114e-008, 79, 0, -201.078 )
[node name="BuildingBlock54" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( -4.37114e-008, 0, 1, 0, 0.6, 0, -1, 0, -4.37114e-008, 79, 4.83048, -181.541 )
[node name="BuildingBlock43" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 46, 0, -211 )
[node name="BuildingBlock44" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 7 )]
[node name="BuildingBlock44" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 19, 0, -211 )
[node name="BuildingBlock45" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 7 )]
[node name="BuildingBlock45" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -8, 0, -211 )
[node name="BuildingBlock46" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 7 )]
[node name="BuildingBlock46" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -35, 0, -211 )
[node name="BuildingBlock47" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 7 )]
[node name="BuildingBlock47" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( -4.37114e-008, 0, -1, 0, 1, 0, 1, 0, -4.37114e-008, -56, 0, -217 )
[node name="BuildingBlock48" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 7 )]
[node name="BuildingBlock48" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( -4.37114e-008, 0, -1, 0, 1, 0, 1, 0, -4.37114e-008, -71, 0, -217 )
[node name="BuildingBlock50" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 7 )]
[node name="BuildingBlock50" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( -4.37114e-008, 0, -1, 0, 1, 0, 1, 0, -4.37114e-008, -71, 0, -244 )
[node name="BuildingBlock51" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 7 )]
[node name="BuildingBlock51" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( -1, 0, 8.74228e-008, 0, 1, 0, -8.74228e-008, 0, -1, -92, 0, -250 )
[node name="BuildingBlock52" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 7 )]
[node name="BuildingBlock52" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( 1.31134e-007, 0, 1, 0, 1, 0, -1, 0, 1.31134e-007, -113, 0, -256 )
[node name="BuildingBlock32" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 7 )]
[node name="BuildingBlock32" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 8, 0, -169 )
[node name="BuildingBlock33" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 7 )]
[node name="BuildingBlock33" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -19, 0, -169 )
[node name="BuildingBlock34" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 7 )]
[node name="BuildingBlock34" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -46, 0, -169 )
[node name="BuildingBlock35" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 7 )]
[node name="BuildingBlock35" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( -4.37114e-008, 0, 1, 0, 1, 0, -1, 0, -4.37114e-008, -67, 0, -163 )
[node name="BuildingBlock36" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 7 )]
[node name="BuildingBlock36" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -76, 0, -142 )
[node name="BuildingBlock49" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 7 )]
[node name="BuildingBlock49" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -103, 0, -142 )
[node name="BuildingBlock27" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 7 )]
[node name="BuildingBlock27" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( -4.37114e-008, 0, 1, 0, 1, 0, -1, 0, -4.37114e-008, 41, 0, -148 )
[node name="BuildingBlock28" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 7 )]
[node name="BuildingBlock28" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( -4.37114e-008, 0, 1, 0, 1, 0, -1, 0, -4.37114e-008, 79, 0, -109 )
[node name="BuildingBlock29" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 7 )]
[node name="BuildingBlock29" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( -4.37114e-008, 0, 1, 0, 1, 0, -1, 0, -4.37114e-008, 79, 0, -136 )
[node name="BuildingBlock30" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 7 )]
[node name="BuildingBlock30" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( -4.37114e-008, 0, 1, 0, 1, 0, -1, 0, -4.37114e-008, 79, 0, -163 )
[node name="BuildingBlock39" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 7 )]
[node name="BuildingBlock39" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( -4.37114e-008, 0, 1, 0, 1, 0, -1, 0, -4.37114e-008, 133, 0, -190 )
[node name="MeldewesenHome" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
[node name="MeldewesenHome" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 9 )]
[node name="BuildingBlock6" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 7 )]
[node name="BuildingBlock6" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( -4.37114e-008, 0, 1, 0, 1, 0, -1, 0, -4.37114e-008, 13, 0, -67 )
[node name="BuildingBlock7" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 7 )]
[node name="BuildingBlock7" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 19, 0, -88 )
[node name="BuildingBlock8" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 7 )]
[node name="BuildingBlock8" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 19, 0, -88 )
[node name="BuildingBlock22" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 7 )]
[node name="BuildingBlock22" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 46, 0, -88 )
[node name="BuildingBlock23" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 7 )]
[node name="BuildingBlock23" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 8 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 73, 0, -88 )
[node name="Factory" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 9 )]
[node name="Factory" parent="NavigationMeshInstance/BuildingBlocks" instance=ExtResource( 10 )]
[node name="Ground" type="MeshInstance" parent="NavigationMeshInstance"]
editor/display_folded = true
@ -251,30 +294,40 @@ mesh = SubResource( 3 )
material/0 = null
[node name="StaticBody" type="StaticBody" parent="NavigationMeshInstance/Ground"]
editor/display_folded = true
collision_layer = 7
collision_mask = 7
[node name="CollisionShape" type="CollisionShape" parent="NavigationMeshInstance/Ground/StaticBody"]
shape = SubResource( 4 )
[node name="DoorWall" parent="NavigationMeshInstance/Ground" instance=ExtResource( 11 )]
transform = Transform( -4.37114e-008, 0, 1, 0, 1, 0, -1, 0, -4.37114e-008, 156.062, 0, -76.2607 )
[node name="Door" parent="NavigationMeshInstance/Ground/DoorWall" index="3"]
door_lvl = 1
[node name="Environment" type="Spatial" parent="."]
editor/display_folded = true
[node name="WorldEnvironment" type="WorldEnvironment" parent="Environment"]
environment = SubResource( 6 )
[node name="DirectionalLight" type="DirectionalLight" parent="Environment"]
transform = Transform( 0.642788, -0.262003, -0.719846, -8.21505e-008, -0.939693, 0.34202, -0.766044, -0.219847, -0.604023, 0, 7, 0 )
transform = Transform( 0.642788, -0.262003, -0.719846, 0, -0.939693, 0.34202, -0.766044, -0.219846, -0.604023, 0, 7, 0 )
layers = 3
shadow_enabled = true
[node name="NodeGroupNotifier" parent="." instance=ExtResource( 10 )]
[node name="NodeGroupNotifier" parent="." instance=ExtResource( 12 )]
group_name = "Navigator"
node_to_send = NodePath("..")
[node name="PathNavigatorForNPC" parent="." instance=ExtResource( 11 )]
[node name="PathNavigatorForNPC" parent="." instance=ExtResource( 13 )]
curve = SubResource( 7 )
body_nodepath = NodePath("Meldewesen")
[node name="Meldewesen" parent="PathNavigatorForNPC" instance=ExtResource( 12 )]
[node name="Meldewesen" parent="PathNavigatorForNPC" instance=ExtResource( 2 )]
[node name="AmbiencePlayer" parent="." instance=ExtResource( 13 )]
[node name="AmbiencePlayer" parent="." instance=ExtResource( 14 )]
[editable path="NavigationMeshInstance/Ground/DoorWall"]

43
ReTrace_report.md Normal file
View File

@ -0,0 +1,43 @@
# ReTrace
brief game description, about 3 sentences
## Group Members
- Bittner Karl, if17b005
- Leithner Michael, if17b051
- Palluch Leon, if17b033
- Schmidt Nino, if17b037
## Controls
- standard fps: walk with WASD, look around with mouse
- take pills with 'R'
- interact with objects 'E'
## Gameplay Features
- day-night cycle
- feature B
- ...
## Technical Features (Unity and other)
- Godot :D
- Particles
- Navigation Path
- AudioMixer
## Time Spent report
- Where and in what areas did you spend your time. How much time did you use for feature A, B, C, how much for gameplay programming, where did you spend more/less time than anticipated,
- How well did you manage to stay within the time budget and why.
- Who did what in the assignment
## Problems and Challenges
Where did you run into problems and challenges and how did you solve them
## Resources, Sources, References and Links
Links to all resources, sources you are using. Don't try to reinvent the wheel and be smart about what you build and what you use from others, but never forget to document it accordingly. If you use something and don't document it, its plagiarism!
- http://docs.godotengine.org/
## Self Assesment
Game Design: 35
Technical/Unity Features: 30
meta: 15
---------
total: 80

BIN
Resources/Audio/cock.wav Normal file

Binary file not shown.

View File

@ -0,0 +1,21 @@
[remap]
importer="wav"
type="AudioStreamSample"
path="res://.import/cock.wav-89444e13e9761c20354b7f2c9a7420fe.sample"
[deps]
source_file="res://Resources/Audio/cock.wav"
dest_files=[ "res://.import/cock.wav-89444e13e9761c20354b7f2c9a7420fe.sample" ]
[params]
force/8_bit=false
force/mono=false
force/max_rate=false
force/max_rate_hz=44100
edit/trim=true
edit/normalize=true
edit/loop=false
compress/mode=0

BIN
Resources/Audio/do-job.wav Normal file

Binary file not shown.

View File

@ -0,0 +1,21 @@
[remap]
importer="wav"
type="AudioStreamSample"
path="res://.import/do-job.wav-43df1cc0e940e076a0d16a1f10561364.sample"
[deps]
source_file="res://Resources/Audio/do-job.wav"
dest_files=[ "res://.import/do-job.wav-43df1cc0e940e076a0d16a1f10561364.sample" ]
[params]
force/8_bit=false
force/mono=false
force/max_rate=false
force/max_rate_hz=44100
edit/trim=true
edit/normalize=true
edit/loop=false
compress/mode=0

BIN
Resources/Audio/go-home.wav Normal file

Binary file not shown.

View File

@ -0,0 +1,21 @@
[remap]
importer="wav"
type="AudioStreamSample"
path="res://.import/go-home.wav-b95ef6ffb01db7d887c9c8215db4aeac.sample"
[deps]
source_file="res://Resources/Audio/go-home.wav"
dest_files=[ "res://.import/go-home.wav-b95ef6ffb01db7d887c9c8215db4aeac.sample" ]
[params]
force/8_bit=false
force/mono=false
force/max_rate=false
force/max_rate_hz=44100
edit/trim=true
edit/normalize=true
edit/loop=false
compress/mode=0

Binary file not shown.

View File

@ -0,0 +1,21 @@
[remap]
importer="wav"
type="AudioStreamSample"
path="res://.import/take-pills.wav-c53467c031bc41f1583c5df7c998da45.sample"
[deps]
source_file="res://Resources/Audio/take-pills.wav"
dest_files=[ "res://.import/take-pills.wav-c53467c031bc41f1583c5df7c998da45.sample" ]
[params]
force/8_bit=false
force/mono=false
force/max_rate=false
force/max_rate_hz=44100
edit/trim=true
edit/normalize=true
edit/loop=false
compress/mode=0

BIN
Resources/Audio/to-work.wav Normal file

Binary file not shown.

View File

@ -0,0 +1,21 @@
[remap]
importer="wav"
type="AudioStreamSample"
path="res://.import/to-work.wav-651eff9c01a8a6733015d116b9be0020.sample"
[deps]
source_file="res://Resources/Audio/to-work.wav"
dest_files=[ "res://.import/to-work.wav-651eff9c01a8a6733015d116b9be0020.sample" ]
[params]
force/8_bit=false
force/mono=false
force/max_rate=false
force/max_rate_hz=44100
edit/trim=true
edit/normalize=true
edit/loop=false
compress/mode=0

View File

@ -3,6 +3,6 @@
[ext_resource path="res://Resources/Fonts/Beon-Regular.otf" type="DynamicFontData" id=1]
[resource]
size = 180
size = 20
use_filter = true
font_data = ExtResource( 1 )

View File

@ -0,0 +1,10 @@
# Blender MTL File: 'None'
# Material Count: 1
newmtl None
Ns 500
Ka 0.8 0.8 0.8
Kd 0.8 0.8 0.8
Ks 0.8 0.8 0.8
d 1
illum 2

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,18 @@
[remap]
importer="wavefront_obj"
type="Mesh"
path="res://.import/LabyrinthCorridorSolid.obj-e1fbddf1d982d3a7646524843d326cb5.mesh"
[deps]
files=[ "res://.import/LabyrinthCorridorSolid.obj-e1fbddf1d982d3a7646524843d326cb5.mesh" ]
source_file="res://Resources/Models/LabyrinthCorridorSolid.obj"
dest_files=[ "res://.import/LabyrinthCorridorSolid.obj-e1fbddf1d982d3a7646524843d326cb5.mesh", "res://.import/LabyrinthCorridorSolid.obj-e1fbddf1d982d3a7646524843d326cb5.mesh" ]
[params]
generate_tangents=true
scale_mesh=Vector3( 1, 1, 1 )
optimize_mesh=true

View File

@ -0,0 +1,10 @@
# Blender MTL File: 'None'
# Material Count: 1
newmtl None
Ns 500
Ka 0.8 0.8 0.8
Kd 0.8 0.8 0.8
Ks 0.8 0.8 0.8
d 1
illum 2

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,18 @@
[remap]
importer="wavefront_obj"
type="Mesh"
path="res://.import/LabyrinthCorridorWalkable.obj-3c2f1f74b653b9e457e6513fd3db92e0.mesh"
[deps]
files=[ "res://.import/LabyrinthCorridorWalkable.obj-3c2f1f74b653b9e457e6513fd3db92e0.mesh" ]
source_file="res://Resources/Models/LabyrinthCorridorWalkable.obj"
dest_files=[ "res://.import/LabyrinthCorridorWalkable.obj-3c2f1f74b653b9e457e6513fd3db92e0.mesh", "res://.import/LabyrinthCorridorWalkable.obj-3c2f1f74b653b9e457e6513fd3db92e0.mesh" ]
[params]
generate_tangents=true
scale_mesh=Vector3( 1, 1, 1 )
optimize_mesh=true

View File

@ -0,0 +1,12 @@
# Blender MTL File: 'None'
# Material Count: 1
newmtl Material
Ns 323.999994
Ka 1.000000 1.000000 1.000000
Kd 0.800000 0.800000 0.800000
Ks 0.500000 0.500000 0.500000
Ke 0.0 0.0 0.0
Ni 1.450000
d 1.000000
illum 2

View File

@ -0,0 +1,46 @@
# Blender v2.80 (sub 75) OBJ File: ''
# www.blender.org
mtllib LabyrinthCrossingSolid.mtl
o Cube
v 5.000000 10.000000 -5.000000
v 5.000000 0.000000 -5.000000
v 5.000000 10.000000 5.000000
v 5.000000 0.000000 5.000000
v -5.000000 10.000000 -5.000000
v -5.000000 0.000000 -5.000000
v -5.000000 10.000000 5.000000
v -5.000000 0.000000 5.000000
vt 0.375000 0.000000
vt 0.625000 0.000000
vt 0.625000 0.250000
vt 0.375000 0.250000
vt 0.375000 0.250000
vt 0.625000 0.250000
vt 0.625000 0.500000
vt 0.375000 0.500000
vt 0.625000 0.750000
vt 0.375000 0.750000
vt 0.625000 0.750000
vt 0.625000 1.000000
vt 0.375000 1.000000
vt 0.125000 0.500000
vt 0.375000 0.500000
vt 0.375000 0.750000
vt 0.125000 0.750000
vt 0.625000 0.500000
vt 0.875000 0.500000
vt 0.875000 0.750000
vn 0.0000 1.0000 0.0000
vn 0.0000 0.0000 1.0000
vn -1.0000 0.0000 0.0000
vn 0.0000 -1.0000 0.0000
vn 1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000
usemtl Material
s off
f 1/1/1 5/2/1 7/3/1 3/4/1
f 4/5/2 3/6/2 7/7/2 8/8/2
f 8/8/3 7/7/3 5/9/3 6/10/3
f 6/10/4 2/11/4 4/12/4 8/13/4
f 2/14/5 1/15/5 3/16/5 4/17/5
f 6/18/6 5/19/6 1/20/6 2/11/6

View File

@ -0,0 +1,18 @@
[remap]
importer="wavefront_obj"
type="Mesh"
path="res://.import/LabyrinthCrossingSolid.obj-efc7848f62ed6abc18e4c87094fc9a8d.mesh"
[deps]
files=[ "res://.import/LabyrinthCrossingSolid.obj-efc7848f62ed6abc18e4c87094fc9a8d.mesh" ]
source_file="res://Resources/Models/LabyrinthCrossingSolid.obj"
dest_files=[ "res://.import/LabyrinthCrossingSolid.obj-efc7848f62ed6abc18e4c87094fc9a8d.mesh", "res://.import/LabyrinthCrossingSolid.obj-efc7848f62ed6abc18e4c87094fc9a8d.mesh" ]
[params]
generate_tangents=true
scale_mesh=Vector3( 1, 1, 1 )
optimize_mesh=true

View File

@ -0,0 +1,10 @@
# Blender MTL File: 'None'
# Material Count: 1
newmtl None
Ns 500
Ka 0.8 0.8 0.8
Kd 0.8 0.8 0.8
Ks 0.8 0.8 0.8
d 1
illum 2

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,18 @@
[remap]
importer="wavefront_obj"
type="Mesh"
path="res://.import/LabyrinthCrossingWalkable.obj-93ee31c643124be7d6066948172b345d.mesh"
[deps]
files=[ "res://.import/LabyrinthCrossingWalkable.obj-93ee31c643124be7d6066948172b345d.mesh" ]
source_file="res://Resources/Models/LabyrinthCrossingWalkable.obj"
dest_files=[ "res://.import/LabyrinthCrossingWalkable.obj-93ee31c643124be7d6066948172b345d.mesh", "res://.import/LabyrinthCrossingWalkable.obj-93ee31c643124be7d6066948172b345d.mesh" ]
[params]
generate_tangents=true
scale_mesh=Vector3( 1, 1, 1 )
optimize_mesh=true

View File

@ -1,17 +1,20 @@
[gd_scene load_steps=8 format=2]
[ext_resource path="res://Resources/Fonts/MainFont.tres" type="DynamicFont" id=1]
[ext_resource path="res://Resources/Fonts/Beon-Regular.otf" type="DynamicFontData" id=2]
[ext_resource path="res://UI/PlayButton.gd" type="Script" id=3]
[ext_resource path="res://UI/ExitButton.gd" type="Script" id=4]
[ext_resource path="res://Resources/Fonts/Beon-Regular.otf" type="DynamicFontData" id=1]
[ext_resource path="res://UI/PlayButton.gd" type="Script" id=2]
[ext_resource path="res://UI/ExitButton.gd" type="Script" id=3]
[sub_resource type="DynamicFont" id=4]
size = 180
font_data = ExtResource( 1 )
[sub_resource type="DynamicFont" id=1]
size = 32
font_data = ExtResource( 2 )
font_data = ExtResource( 1 )
[sub_resource type="DynamicFont" id=2]
size = 32
font_data = ExtResource( 2 )
font_data = ExtResource( 1 )
[sub_resource type="Animation" id=3]
resource_name = "Text"
@ -80,9 +83,10 @@ margin_bottom = 400.0
[node name="GameTitle" type="Label" parent="."]
margin_left = 1.0
margin_top = -1.16635
margin_right = 1025.0
margin_bottom = 400.0
custom_fonts/font = ExtResource( 1 )
margin_bottom = 398.834
custom_fonts/font = SubResource( 4 )
custom_colors/font_color = Color( 1, 1, 1, 1 )
custom_colors/font_color_shadow = Color( 1, 0, 0, 1 )
custom_constants/shadow_offset_x = 4
@ -112,7 +116,7 @@ custom_colors/font_color = Color( 1, 1, 1, 1 )
custom_colors/font_color_hover = Color( 0.980392, 0.839216, 0.619608, 1 )
text = "Embark"
flat = true
script = ExtResource( 3 )
script = ExtResource( 2 )
[node name="ExitButton" type="Button" parent="."]
margin_left = 380.0
@ -123,7 +127,7 @@ custom_fonts/font = SubResource( 2 )
custom_colors/font_color = Color( 1, 1, 1, 1 )
text = "Disembark"
flat = true
script = ExtResource( 4 )
script = ExtResource( 3 )
[node name="AnimateForeground" type="AnimationPlayer" parent="."]
autoplay = "Text"