summaryrefslogtreecommitdiffstats
path: root/world
diff options
context:
space:
mode:
Diffstat (limited to 'world')
-rw-r--r--world/World.gd66
-rw-r--r--world/World.tscn65
-rw-r--r--world/chunk/Chunk.gd32
-rw-r--r--world/chunk/Chunk.tscn46
-rw-r--r--world/chunk/ChunkGen.gd123
-rw-r--r--world/chunk/ChunkLoader.gd131
-rw-r--r--world/chunk/helper/ChunkedCSGMesh.gd6
-rw-r--r--world/chunk/helper/ChunkedMeshInstance.gd6
-rw-r--r--world/chunk/helper/ChunkedSprite3D.gd6
-rw-r--r--world/monuments/Dock.tscn163
-rw-r--r--world/monuments/DockMonument.gd19
-rw-r--r--world/monuments/Monument.gd21
-rw-r--r--world/monuments/lighthouse/frame.materialbin0 -> 1680 bytes
-rw-r--r--world/monuments/lighthouse/light.materialbin0 -> 1680 bytes
-rw-r--r--world/monuments/lighthouse/lighthouse.binbin0 -> 79232 bytes
-rw-r--r--world/monuments/lighthouse/lighthouse.blendbin0 -> 1213868 bytes
-rw-r--r--world/monuments/lighthouse/lighthouse.gd6
-rw-r--r--world/monuments/lighthouse/lighthouse.gltf334
-rw-r--r--world/monuments/lighthouse/lighthouse.gltf.import1065
-rw-r--r--world/monuments/lighthouse/lighthouse.tscn64
-rw-r--r--world/monuments/lighthouse/lighthouse_alpha.pngbin0 -> 143471 bytes
-rw-r--r--world/monuments/lighthouse/lighthouse_alpha.png.import35
-rw-r--r--world/monuments/lighthouse/lighthouse_baked.materialbin0 -> 2078 bytes
-rw-r--r--world/monuments/lighthouse/lighthouse_color.pngbin0 -> 4912548 bytes
-rw-r--r--world/monuments/lighthouse/lighthouse_color.png.import35
-rw-r--r--world/monuments/lighthouse/lighthouse_color_png-lighthouse_alpha_png.pngbin0 -> 5660854 bytes
-rw-r--r--world/monuments/lighthouse/lighthouse_color_png-lighthouse_alpha_png.png.import37
-rw-r--r--world/monuments/lighthouse/lighthouse_disp.pngbin0 -> 1680117 bytes
-rw-r--r--world/monuments/lighthouse/lighthouse_disp.png.import35
-rw-r--r--world/monuments/lighthouse/lighthouse_normal.pngbin0 -> 5297472 bytes
-rw-r--r--world/monuments/lighthouse/lighthouse_normal.png.import37
-rw-r--r--world/monuments/lighthouse/lighthouse_roughness.pngbin0 -> 3039450 bytes
-rw-r--r--world/monuments/lighthouse/lighthouse_roughness.png.import37
-rw-r--r--world/obstacles/Rock_coll.tres4
-rw-r--r--world/obstacles/Rock_lowres_mesh.tres4
-rw-r--r--world/obstacles/Rock_mat.tres21
-rw-r--r--world/obstacles/Rock_mesh.tres4
37 files changed, 2402 insertions, 0 deletions
diff --git a/world/World.gd b/world/World.gd
new file mode 100644
index 0000000..3afc4eb
--- /dev/null
+++ b/world/World.gd
@@ -0,0 +1,66 @@
+extends Spatial
+
+export(NodePath) var traveler = null
+onready var _traveler = get_node(traveler)
+export var acceleration = 10.0
+
+onready var chunk_render_distance = $"ChunkRenderDistance"
+onready var chunk_render_mid = $"ChunkRenderMid"
+onready var chunk_render_close = $"ChunkRenderClose"
+
+onready var lod_distance = chunk_render_distance.get_node("Radius").shape.radius
+onready var lod_mid = chunk_render_mid.get_node("Radius").shape.radius
+onready var lod_close = chunk_render_close.get_node("Radius").shape.radius
+
+onready var chunk_half_size = $"Chunk/Size".shape.radius
+onready var chunk_size = chunk_half_size * 2.0
+
+func _ready():
+ ChunkLoader.world = self
+ ChunkGen.setup_monuments()
+
+func _on_ChunkRenderDistance_area_entered(area:Area):
+ if area.lod < area.LOD.DISTANCE:
+ area.lod = area.LOD.DISTANCE
+ area.lod_update()
+
+func _on_ChunkRenderMid_area_entered(area:Area):
+ if area.lod < area.LOD.MID:
+ area.lod = area.LOD.MID
+ area.lod_update()
+
+func _on_ChunkRenderClose_area_entered(area:Area):
+ if area.lod < area.LOD.CLOSE:
+ area.lod = area.LOD.CLOSE
+ area.lod_update()
+
+func _on_ChunkRenderDistance_area_exited(area:Area):
+ free_chunk(area)
+
+func _on_ChunkRenderMid_area_exited(area:Area):
+ area.lod = area.LOD.DISTANCE
+ area.lod_update()
+
+func _on_ChunkRenderClose_area_exited(area:Area):
+ area.lod = area.LOD.MID
+ area.lod_update()
+
+func travel(direction:Vector3):
+ var heading = _traveler.global_transform.basis
+ heading = Basis(Vector3.UP*heading.get_euler().y)
+ direction = -direction
+ direction = heading * direction
+ direction = direction.normalized()
+ $"Chunks".add_central_force(direction*acceleration)
+
+func _physics_process(_state):
+ ChunkLoader.chunk_update()
+ var stick = Input.get_axis("ship_down","ship_up")
+ if stick != 0.0:
+ self.travel(Vector3.FORWARD*stick)
+
+func free_chunk(chunk):
+ var coords = chunk.transform.origin
+ coords = Vector2(coords.x,coords.z)
+ coords = coords.snapped(Vector2(chunk_size,chunk_size))
+ ChunkLoader.free_chunk(coords)
diff --git a/world/World.tscn b/world/World.tscn
new file mode 100644
index 0000000..e5b4a67
--- /dev/null
+++ b/world/World.tscn
@@ -0,0 +1,65 @@
+[gd_scene load_steps=7 format=2]
+
+[ext_resource path="res://world/World.gd" type="Script" id=1]
+[ext_resource path="res://world/chunk/Chunk.tscn" type="PackedScene" id=3]
+
+[sub_resource type="SphereShape" id=24]
+radius = 1000.0
+
+[sub_resource type="SphereShape" id=25]
+radius = 500.0
+
+[sub_resource type="SphereShape" id=26]
+radius = 150.0
+
+[sub_resource type="BoxShape" id=23]
+
+[node name="World" type="Spatial"]
+script = ExtResource( 1 )
+acceleration = 50.0
+
+[node name="ChunkRenderDistance" type="Area" parent="."]
+collision_layer = 0
+collision_mask = 32
+
+[node name="Radius" type="CollisionShape" parent="ChunkRenderDistance"]
+shape = SubResource( 24 )
+
+[node name="ChunkRenderMid" type="Area" parent="."]
+collision_layer = 0
+collision_mask = 32
+
+[node name="Radius" type="CollisionShape" parent="ChunkRenderMid"]
+shape = SubResource( 25 )
+
+[node name="ChunkRenderClose" type="Area" parent="."]
+collision_layer = 0
+collision_mask = 32
+
+[node name="Radius" type="CollisionShape" parent="ChunkRenderClose"]
+shape = SubResource( 26 )
+
+[node name="Chunk" parent="." instance=ExtResource( 3 )]
+visible = false
+collision_layer = 0
+
+[node name="Chunks" type="RigidBody" parent="."]
+collision_layer = 0
+collision_mask = 0
+can_sleep = false
+axis_lock_linear_y = true
+axis_lock_angular_x = true
+axis_lock_angular_y = true
+axis_lock_angular_z = true
+linear_damp = 0.5
+
+[node name="CollisionShape" type="CollisionShape" parent="Chunks"]
+shape = SubResource( 23 )
+
+
+[connection signal="area_entered" from="ChunkRenderDistance" to="." method="_on_ChunkRenderDistance_area_entered"]
+[connection signal="area_exited" from="ChunkRenderDistance" to="." method="_on_ChunkRenderDistance_area_exited"]
+[connection signal="area_entered" from="ChunkRenderMid" to="." method="_on_ChunkRenderMid_area_entered"]
+[connection signal="area_exited" from="ChunkRenderMid" to="." method="_on_ChunkRenderMid_area_exited"]
+[connection signal="area_entered" from="ChunkRenderClose" to="." method="_on_ChunkRenderClose_area_entered"]
+[connection signal="area_exited" from="ChunkRenderClose" to="." method="_on_ChunkRenderClose_area_exited"]
diff --git a/world/chunk/Chunk.gd b/world/chunk/Chunk.gd
new file mode 100644
index 0000000..4356caf
--- /dev/null
+++ b/world/chunk/Chunk.gd
@@ -0,0 +1,32 @@
+extends Area
+
+enum LOD {DISTANCE,MID,CLOSE}
+var lod = -1
+
+onready var lod_distance = $"gen_tree/lod_distance"
+onready var lod_mid = $"gen_tree/lod_mid"
+onready var lod_close = $"gen_tree/lod_close"
+
+onready var _collision_enabled = lod_close.collision_layer
+
+func _ready():
+ lod_update()
+
+func lod_update():
+ match lod:
+ LOD.CLOSE:
+ lod_distance.visible = false
+ lod_mid.visible = true
+ lod_close.collision_layer = _collision_enabled
+ LOD.MID:
+ lod_distance.visible = false
+ lod_mid.visible = true
+ lod_close.collision_layer = 0
+ LOD.DISTANCE:
+ lod_distance.visible = true
+ lod_mid.visible = false
+ lod_close.collision_layer = 0
+ _:
+ lod_distance.visible = true
+ lod_mid.visible = false
+ lod_close.collision_layer = 0
diff --git a/world/chunk/Chunk.tscn b/world/chunk/Chunk.tscn
new file mode 100644
index 0000000..5377ae9
--- /dev/null
+++ b/world/chunk/Chunk.tscn
@@ -0,0 +1,46 @@
+[gd_scene load_steps=7 format=2]
+
+[ext_resource path="res://world/chunk/Chunk.gd" type="Script" id=1]
+[ext_resource path="res://world/chunk/helper/ChunkedCSGMesh.gd" type="Script" id=2]
+
+[sub_resource type="SphereShape" id=1]
+radius = 50.0
+
+[sub_resource type="SpatialMaterial" id=3]
+flags_unshaded = true
+params_cull_mode = 2
+albedo_color = Color( 0.937255, 0, 1, 1 )
+
+[sub_resource type="PlaneMesh" id=2]
+size = Vector2( 100, 100 )
+
+[sub_resource type="PlaneMesh" id=4]
+size = Vector2( 98, 98 )
+
+[node name="Chunk" type="Area"]
+collision_layer = 32
+collision_mask = 0
+script = ExtResource( 1 )
+
+[node name="Size" type="CollisionShape" parent="."]
+shape = SubResource( 1 )
+
+[node name="Border" type="CSGMesh" parent="."]
+material_override = SubResource( 3 )
+script = ExtResource( 2 )
+_mesh = SubResource( 2 )
+
+[node name="CSGMesh" type="CSGMesh" parent="Border"]
+operation = 2
+script = ExtResource( 2 )
+_mesh = SubResource( 4 )
+
+[node name="gen_tree" type="Spatial" parent="."]
+
+[node name="lod_distance" type="Spatial" parent="gen_tree"]
+
+[node name="lod_mid" type="Spatial" parent="gen_tree"]
+
+[node name="lod_close" type="StaticBody" parent="gen_tree"]
+collision_layer = 8
+collision_mask = 0
diff --git a/world/chunk/ChunkGen.gd b/world/chunk/ChunkGen.gd
new file mode 100644
index 0000000..994d624
--- /dev/null
+++ b/world/chunk/ChunkGen.gd
@@ -0,0 +1,123 @@
+extends Node
+
+onready var noise = OpenSimplexNoise.new()
+onready var rng = RandomNumberGenerator.new()
+var _seed
+
+var monuments = []
+
+func _ready():
+ #randomize()
+ #self._seed = randi()
+ self._seed = 0
+ self.noise.seed = self._seed
+ self.noise.seed = 0
+ self.noise.period = 16
+ self.noise.persistence = 0
+ self.rng.seed = self._seed
+
+func setup_monuments():
+ monuments.push_back(DockMonument.new(Transform(Basis().rotated(Vector3.UP,0.0),Vector3(0.0,0.0,-600.0))))
+ monuments.push_back(DockMonument.new(Transform(Basis().rotated(Vector3.UP,PI),Vector3(0.0,0.0,600.0))))
+
+func rng_2dv(coords:Vector2):
+ self.rng.seed = hash(coords)
+
+func gen_chunk(chunk,dummy=false):
+ if dummy:
+ return
+ var monument = get_monument_at_chunk(ChunkLoader.v2_coords(chunk.transform.origin))
+ if monument != null:
+ gen_monument(chunk, monument)
+ else:
+ gen_distance(chunk,chunk.get_node("gen_tree/lod_distance"))
+ gen_mid(chunk,chunk.get_node("gen_tree/lod_mid"))
+ gen_close(chunk,chunk.get_node("gen_tree/lod_close"))
+
+func get_monument_at_chunk(chunk_coords:Vector2):
+ for monument in monuments:
+ if monument.is_chunk_in_monument(chunk_coords):
+ return monument
+ return null
+
+func gen_monument(chunk, monument):
+ var offset_to_origin = monument.origin_chunk - ChunkLoader.v2_coords(chunk.transform.origin)
+ var inst = monument.scene.instance()
+ inst.transform.origin = ChunkLoader.v3_coords(offset_to_origin)
+ inst.transform.basis = monument.xform.basis
+ chunk.add_child(inst)
+
+func gen_distance(chunk,tree):
+ gen_lowres_rocks(chunk,tree)
+
+func gen_mid(chunk,tree):
+ gen_rocks(chunk,tree)
+
+func gen_close(chunk,tree):
+ gen_rock_hitboxes(chunk,tree)
+
+func iterate_chunk(chunk,tree,step:Vector2,cb:FuncRef,data):
+ var chunk_half_size = ChunkLoader.world.chunk_half_size
+ var chunk_size_rounded = Vector2(chunk_half_size,chunk_half_size).snapped(step)
+ for x in range(-chunk_size_rounded.x,chunk_size_rounded.x,step.x):
+ for y in range(-chunk_size_rounded.y,chunk_size_rounded.y,step.y):
+ cb.call_func(chunk,tree,Vector2(x,y),data)
+
+func make_multimesh(name,cnt,mesh):
+ var multi_inst = MultiMeshInstance.new()
+ multi_inst.name = name
+ var multi = MultiMesh.new()
+ multi_inst.multimesh = multi
+ multi.transform_format = MultiMesh.TRANSFORM_3D
+ multi.instance_count = cnt
+ multi.visible_instance_count = 0
+ multi.mesh = mesh
+ return multi_inst
+
+var rock_mesh = preload("res://world/obstacles/Rock_mesh.tres")
+var rock_mat = preload("res://world/obstacles/Rock_mat.tres")
+func gen_rocks(chunk,tree):
+ rock_mesh.material = rock_mat
+ var multi = make_multimesh("rocks",200,rock_mesh)
+ tree.add_child(multi)
+ iterate_chunk(chunk, multi.multimesh, Vector2(10.0,10.0), funcref(self,"rock_rng"), [0.4,0.6,1.0,4.0,1.0,funcref(self,"make_rock")])
+
+var rock_lowres_mesh = preload("res://world/obstacles/Rock_lowres_mesh.tres")
+func gen_lowres_rocks(chunk,tree):
+ rock_lowres_mesh.material = rock_mat
+ var multi = make_multimesh("rocks",50,rock_lowres_mesh)
+ tree.add_child(multi)
+ iterate_chunk(chunk, multi.multimesh, Vector2(20.0,20.0), funcref(self,"rock_rng"), [0.4,0.6,2.0,8.0,0.5,funcref(self,"make_rock")])
+
+var rock_coll = preload("res://world/obstacles/Rock_coll.tres")
+func gen_rock_hitboxes(chunk,tree):
+ iterate_chunk(chunk, tree, Vector2(20.0,20.0), funcref(self,"rock_rng"), [0.4,0.6,1.0,4.0,1.0,funcref(self,"make_rock_hitbox")])
+
+func rock_rng(chunk,rocks,chunk_coords:Vector2,data):
+ var coords = ChunkLoader.v3_coords(chunk_coords)
+ var basis = Basis()
+ var world_coords = chunk_coords + ChunkLoader.v2_coords(chunk.transform.origin)
+ self.rng_2dv(world_coords)
+ var rng_val = self.rng.randf_range(0.0,TAU)
+ basis = Basis(Vector3.UP,rng_val) * basis
+ var noise_val = self.noise.get_noise_2dv(world_coords * 0.125)
+ if noise_val < data[0]:
+ return
+ noise_val = min(noise_val,data[1])
+ noise_val -= data[0]
+ noise_val /= data[1] - data[0]
+ noise_val = lerp(data[2],data[3],noise_val)
+ basis = basis.scaled(Vector3.ONE*noise_val)
+ basis = basis.scaled(Vector3(1.0,data[4],1.0))
+ coords.y += (noise_val*data[4]*5.0)-5.0
+ data[5].call_func(rocks,Transform(basis,coords))
+
+func make_rock(rocks,xform:Transform):
+ rocks.visible_instance_count += 1
+ rocks.set_instance_transform(rocks.visible_instance_count-1, xform)
+
+func make_rock_hitbox(rocks,xform:Transform):
+ var shape = CollisionShape.new()
+ shape.shape = rock_coll
+ shape.transform = xform
+ rocks.add_child(shape)
diff --git a/world/chunk/ChunkLoader.gd b/world/chunk/ChunkLoader.gd
new file mode 100644
index 0000000..0ea422a
--- /dev/null
+++ b/world/chunk/ChunkLoader.gd
@@ -0,0 +1,131 @@
+extends Node
+
+var world = null
+
+var Chunk = preload("res://world/chunk/Chunk.tscn")
+var loaded_chunks = {}
+var freed_chunks = {}
+var chunk_thread = Thread.new()
+var mtx = Mutex.new()
+var sgnl = Semaphore.new()
+var exit = false
+var chunk_to_load = null
+var chunk_to_len
+var chunk_to_dummy
+
+func _ready():
+ chunk_thread.start(self, "chunk_loader")
+
+func _exit_tree():
+ mtx.lock()
+ exit = true
+ sgnl.post()
+ mtx.unlock()
+ chunk_thread.wait_to_finish()
+
+func v2_coords(coords:Vector3):
+ return Vector2(coords.x,coords.z)
+
+func chunk_coords(coords:Vector2):
+ return coords.snapped(Vector2(world.chunk_size,world.chunk_size))
+
+func v3_coords(coords:Vector2):
+ return Vector3(coords.x,0.0,coords.y)
+
+func free_chunk(coords:Vector2):
+ var monument = ChunkGen.get_monument_at_chunk(coords)
+ if monument != null && monument.loaded_chunk != null && monument.loaded_chunk == coords:
+ return
+ if !loaded_chunks.has(coords):
+ return
+ freed_chunks[coords] = loaded_chunks[coords]
+ loaded_chunks.erase(coords)
+
+func clean_chunks():
+ var cleaned = {}
+ for chunk in freed_chunks.keys():
+ var c = freed_chunks[chunk].get_ref()
+ if c == null:
+ cleaned[chunk] = c
+ continue
+ c.queue_free()
+ for chunk in cleaned.keys():
+ freed_chunks.erase(chunk)
+
+func chunk_update():
+ var chunks = {}
+ var gen_center = -v2_coords(world.get_node("Chunks").transform.origin)
+ var gen_radius = world.lod_distance
+ var gen_radius_rounded = stepify(gen_radius, world.chunk_size)
+ for x in range(-gen_radius_rounded, gen_radius_rounded+world.chunk_size, world.chunk_size):
+ for y in range(-gen_radius_rounded, gen_radius_rounded+world.chunk_size, world.chunk_size):
+ var gen_coords = Vector2(x,y)
+ var coords_len = gen_coords.length()
+ if coords_len > gen_radius:
+ continue
+ var coords = chunk_coords(gen_coords + gen_center)
+ chunks[coords] = coords_len
+ var closest_unloaded_chunk = null
+ var closest_len = 0.0
+ for chunk in chunks.keys():
+ if !loaded_chunks.has(chunk):
+ var chunk_len = chunks[chunk]
+ if closest_unloaded_chunk == null || closest_len > chunk_len:
+ closest_unloaded_chunk = chunk
+ closest_len = chunk_len
+ if closest_unloaded_chunk != null:
+ var dummy = false
+ var monument = ChunkGen.get_monument_at_chunk(closest_unloaded_chunk)
+ if monument != null && monument.loaded_chunk != null:
+ dummy = true
+ mtx.lock()
+ if chunk_to_load == null:
+ chunk_to_load = closest_unloaded_chunk
+ chunk_to_len = closest_len
+ chunk_to_dummy = dummy
+ sgnl.post()
+ mtx.unlock()
+ for monument in ChunkGen.monuments:
+ if monument.loaded_chunk != null:
+ var loaded = false
+ for chunk in chunks.keys():
+ if monument.chunks.has(chunk):
+ loaded = true
+ break
+ if !loaded:
+ monument.loaded_chunk = null
+ for chunk in loaded_chunks.keys():
+ if !chunks.has(chunk):
+ free_chunk(chunk)
+ clean_chunks()
+
+func chunk_loader():
+ while true:
+ sgnl.wait()
+ mtx.lock()
+ var x = exit
+ var coords = chunk_to_load
+ var lod = chunk_to_len
+ var dummy = chunk_to_dummy
+ mtx.unlock()
+ if x:
+ break
+ var chunk = Chunk.instance()
+ chunk.transform.origin = Vector3(coords.x,0.0,coords.y)
+ lod -= world.chunk_size
+ var tmp = world.get_node("Chunk")
+ chunk.lod = tmp.LOD.CLOSE if lod <= world.lod_close else tmp.LOD.MID if lod <= world.lod_mid else tmp.LOD.DISTANCE
+ ChunkGen.gen_chunk(chunk,dummy)
+ self.call_deferred("finish_chunk", chunk)
+
+func finish_chunk(chunk):
+ mtx.lock()
+ chunk_to_load = null
+ mtx.unlock()
+ world.get_node("Chunks").add_child(chunk)
+ var coords = v2_coords(chunk.transform.origin)
+ loaded_chunks[coords] = weakref(chunk)
+ var monument = ChunkGen.get_monument_at_chunk(coords)
+ if monument != null:
+ if monument.loaded_chunk == null:
+ monument.loaded_chunk = coords
diff --git a/world/chunk/helper/ChunkedCSGMesh.gd b/world/chunk/helper/ChunkedCSGMesh.gd
new file mode 100644
index 0000000..2b8c6db
--- /dev/null
+++ b/world/chunk/helper/ChunkedCSGMesh.gd
@@ -0,0 +1,6 @@
+extends CSGMesh
+
+export(Mesh) var _mesh
+
+func _ready():
+ self.mesh = _mesh
diff --git a/world/chunk/helper/ChunkedMeshInstance.gd b/world/chunk/helper/ChunkedMeshInstance.gd
new file mode 100644
index 0000000..dde7eda
--- /dev/null
+++ b/world/chunk/helper/ChunkedMeshInstance.gd
@@ -0,0 +1,6 @@
+extends MeshInstance
+
+export(Mesh) var _mesh
+
+func _ready():
+ self.mesh = _mesh
diff --git a/world/chunk/helper/ChunkedSprite3D.gd b/world/chunk/helper/ChunkedSprite3D.gd
new file mode 100644
index 0000000..c9e0be9
--- /dev/null
+++ b/world/chunk/helper/ChunkedSprite3D.gd
@@ -0,0 +1,6 @@
+extends Sprite3D
+
+export(Texture) var _tex
+
+func _ready():
+ self.texture = _tex
diff --git a/world/monuments/Dock.tscn b/world/monuments/Dock.tscn
new file mode 100644
index 0000000..5a21576
--- /dev/null
+++ b/world/monuments/Dock.tscn
@@ -0,0 +1,163 @@
+[gd_scene load_steps=14 format=2]
+
+[sub_resource type="OpenSimplexNoise" id=1]
+period = 128.0
+persistence = 1.0
+lacunarity = 4.0
+
+[sub_resource type="NoiseTexture" id=2]
+noise = SubResource( 1 )
+
+[sub_resource type="NoiseTexture" id=3]
+seamless = true
+as_normalmap = true
+noise = SubResource( 1 )
+
+[sub_resource type="SpatialMaterial" id=4]
+albedo_color = Color( 0.905882, 0.823529, 0.427451, 1 )
+albedo_texture = SubResource( 2 )
+emission_enabled = true
+emission = Color( 0.905882, 0.823529, 0.427451, 1 )
+emission_energy = 0.2
+emission_operator = 0
+emission_on_uv2 = false
+normal_enabled = true
+normal_scale = 1.0
+normal_texture = SubResource( 3 )
+uv1_triplanar = true
+
+[sub_resource type="SphereMesh" id=5]
+material = SubResource( 4 )
+radius = 50.0
+height = 50.0
+
+[sub_resource type="SpatialMaterial" id=6]
+emission_enabled = true
+emission = Color( 1, 1, 1, 1 )
+emission_energy = 0.25
+emission_operator = 0
+emission_on_uv2 = false
+
+[sub_resource type="CubeMesh" id=7]
+material = SubResource( 6 )
+size = Vector3( 150, 50, 100 )
+
+[sub_resource type="Gradient" id=8]
+interpolation_mode = 1
+offsets = PoolRealArray( 0.0724138, 0.52069 )
+colors = PoolColorArray( 1, 1, 1, 1, 0, 0, 0, 1 )
+
+[sub_resource type="GradientTexture2D" id=9]
+gradient = SubResource( 8 )
+width = 5
+height = 5
+fill = 1
+fill_from = Vector2( 0.5, 0.5 )
+repeat = 1
+
+[sub_resource type="SpatialMaterial" id=10]
+albedo_color = Color( 0.521569, 0.298039, 0.00392157, 1 )
+albedo_texture = SubResource( 9 )
+uv1_triplanar = true
+
+[sub_resource type="PrismMesh" id=11]
+material = SubResource( 10 )
+size = Vector3( 150, 50, 100 )
+
+[sub_resource type="CubeMesh" id=12]
+material = SubResource( 10 )
+size = Vector3( 5, 50, 150 )
+
+[sub_resource type="CubeMesh" id=13]
+material = SubResource( 10 )
+size = Vector3( 100, 5, 30 )
+
+[node name="Dock" type="Spatial"]
+
+[node name="Shore" type="Spatial" parent="."]
+transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -15, 0 )
+
+[node name="MeshInstance" type="MeshInstance" parent="Shore"]
+transform = Transform( -4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -100, 0, 0 )
+mesh = SubResource( 5 )
+skeleton = NodePath("../..")
+
+[node name="MeshInstance2" type="MeshInstance" parent="Shore"]
+transform = Transform( -4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 100, 0, 0 )
+mesh = SubResource( 5 )
+skeleton = NodePath("../..")
+
+[node name="MeshInstance7" type="MeshInstance" parent="Shore"]
+transform = Transform( -4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -100, 0, 70 )
+mesh = SubResource( 5 )
+skeleton = NodePath("../..")
+
+[node name="MeshInstance8" type="MeshInstance" parent="Shore"]
+transform = Transform( -4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 100, 0, 70 )
+mesh = SubResource( 5 )
+skeleton = NodePath("../..")
+
+[node name="MeshInstance3" type="MeshInstance" parent="Shore"]
+transform = Transform( -4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -30, 0, -50 )
+mesh = SubResource( 5 )
+skeleton = NodePath("../..")
+
+[node name="MeshInstance4" type="MeshInstance" parent="Shore"]
+transform = Transform( -4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 30, 0, -50 )
+mesh = SubResource( 5 )
+skeleton = NodePath("../..")
+
+[node name="MeshInstance5" type="MeshInstance" parent="Shore"]
+transform = Transform( -4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -30, 0, -140 )
+mesh = SubResource( 5 )
+skeleton = NodePath("../..")
+
+[node name="MeshInstance9" type="MeshInstance" parent="Shore"]
+transform = Transform( -4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -115, 0, -50 )
+mesh = SubResource( 5 )
+skeleton = NodePath("../..")
+
+[node name="MeshInstance10" type="MeshInstance" parent="Shore"]
+transform = Transform( -4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -115, 0, -140 )
+mesh = SubResource( 5 )
+skeleton = NodePath("../..")
+
+[node name="MeshInstance6" type="MeshInstance" parent="Shore"]
+transform = Transform( -4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 30, 0, -140 )
+mesh = SubResource( 5 )
+skeleton = NodePath("../..")
+
+[node name="MeshInstance11" type="MeshInstance" parent="Shore"]
+transform = Transform( -4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 115, 0, -50 )
+mesh = SubResource( 5 )
+skeleton = NodePath("../..")
+
+[node name="MeshInstance12" type="MeshInstance" parent="Shore"]
+transform = Transform( -4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 115, 0, -140 )
+mesh = SubResource( 5 )
+skeleton = NodePath("../..")
+
+[node name="House" type="Spatial" parent="."]
+transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 25, -80 )
+
+[node name="MeshInstance" type="MeshInstance" parent="House"]
+mesh = SubResource( 7 )
+
+[node name="MeshInstance2" type="MeshInstance" parent="House"]
+transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 50, 0 )
+mesh = SubResource( 11 )
+
+[node name="Dock" type="Spatial" parent="."]
+transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -10, 50 )
+
+[node name="MeshInstance" type="MeshInstance" parent="Dock"]
+transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 50, 0, 0 )
+mesh = SubResource( 12 )
+
+[node name="MeshInstance2" type="MeshInstance" parent="Dock"]
+transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -50, 0, 0 )
+mesh = SubResource( 12 )
+
+[node name="MeshInstance3" type="MeshInstance" parent="Dock"]
+transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 5, -40 )
+mesh = SubResource( 13 )
diff --git a/world/monuments/DockMonument.gd b/world/monuments/DockMonument.gd
new file mode 100644
index 0000000..2ac0c71
--- /dev/null
+++ b/world/monuments/DockMonument.gd
@@ -0,0 +1,19 @@
+extends Monument
+class_name DockMonument
+
+var packed_scene = preload("res://world/monuments/Dock.tscn")
+
+func _init(xform:Transform).(xform,packed_scene,_chunks(),_origin()):
+ pass
+
+func _chunks():
+ var chunk_size = ChunkLoader.world.chunk_size
+ var c = {}
+ var width = stepify(200.0,chunk_size)
+ for x in range(-width,width+chunk_size,chunk_size):
+ for y in range(-width,width+chunk_size,chunk_size):
+ c[Vector2(x,y)] = true
+ return c
+
+func _origin():
+ return Vector2(0.0,0.0)
diff --git a/world/monuments/Monument.gd b/world/monuments/Monument.gd
new file mode 100644
index 0000000..86074f1
--- /dev/null
+++ b/world/monuments/Monument.gd
@@ -0,0 +1,21 @@
+class_name Monument
+
+var xform:Transform = Transform(Basis(),Vector3.ZERO)
+var scene:PackedScene = null
+var chunks = {}
+var origin_chunk = Vector2.ZERO
+var loaded_chunk = null
+
+func is_chunk_in_monument(chunk_coords:Vector2):
+ return self.chunks.has(chunk_coords)
+
+func _init(transform,scn,member_chunks, origin):
+ self.xform = transform
+ self.xform.origin = ChunkLoader.v3_coords(ChunkLoader.chunk_coords(ChunkLoader.v2_coords(self.xform.origin)))
+ self.scene = scn
+ var org = ChunkLoader.chunk_coords(ChunkLoader.v2_coords(self.xform.origin))
+ for c in member_chunks.keys():
+ var c2 = ChunkLoader.v2_coords(self.xform.basis * ChunkLoader.v3_coords(c))
+ self.chunks[ChunkLoader.chunk_coords(c2)+org] = member_chunks[c]
+ origin = ChunkLoader.v2_coords(self.xform.basis * ChunkLoader.v3_coords(origin))
+ self.origin_chunk = ChunkLoader.chunk_coords(origin)+org
diff --git a/world/monuments/lighthouse/frame.material b/world/monuments/lighthouse/frame.material
new file mode 100644
index 0000000..ee5c337
--- /dev/null
+++ b/world/monuments/lighthouse/frame.material
Binary files differ
diff --git a/world/monuments/lighthouse/light.material b/world/monuments/lighthouse/light.material
new file mode 100644
index 0000000..1bed6c4
--- /dev/null
+++ b/world/monuments/lighthouse/light.material
Binary files differ
diff --git a/world/monuments/lighthouse/lighthouse.bin b/world/monuments/lighthouse/lighthouse.bin
new file mode 100644
index 0000000..ebff487
--- /dev/null
+++ b/world/monuments/lighthouse/lighthouse.bin
Binary files differ
diff --git a/world/monuments/lighthouse/lighthouse.blend b/world/monuments/lighthouse/lighthouse.blend
new file mode 100644
index 0000000..66032c4
--- /dev/null
+++ b/world/monuments/lighthouse/lighthouse.blend
Binary files differ
diff --git a/world/monuments/lighthouse/lighthouse.gd b/world/monuments/lighthouse/lighthouse.gd
new file mode 100644
index 0000000..742bad0
--- /dev/null
+++ b/world/monuments/lighthouse/lighthouse.gd
@@ -0,0 +1,6 @@
+extends Spatial
+
+onready var anim = $AnimationPlayer
+
+func _ready():
+ anim.play("spin_light")
diff --git a/world/monuments/lighthouse/lighthouse.gltf b/world/monuments/lighthouse/lighthouse.gltf
new file mode 100644
index 0000000..c35c00e
--- /dev/null
+++ b/world/monuments/lighthouse/lighthouse.gltf
@@ -0,0 +1,334 @@
+{
+ "asset" : {
+ "generator" : "Khronos glTF Blender I/O v3.2.43",
+ "version" : "2.0"
+ },
+ "scene" : 0,
+ "scenes" : [
+ {
+ "name" : "Scene",
+ "nodes" : [
+ 1
+ ]
+ }
+ ],
+ "nodes" : [
+ {
+ "mesh" : 0,
+ "name" : "light",
+ "rotation" : [
+ 0.7071068286895752,
+ 0,
+ 0,
+ 0.7071068286895752
+ ],
+ "translation" : [
+ 0,
+ 165.63571166992188,
+ 0
+ ]
+ },
+ {
+ "children" : [
+ 0
+ ],
+ "mesh" : 1,
+ "name" : "lighthouse"
+ }
+ ],
+ "materials" : [
+ {
+ "doubleSided" : true,
+ "name" : "frame",
+ "pbrMetallicRoughness" : {
+ "baseColorFactor" : [
+ 0.800000011920929,
+ 0.800000011920929,
+ 0.800000011920929,
+ 1
+ ],
+ "metallicFactor" : 0,
+ "roughnessFactor" : 0.5
+ }
+ },
+ {
+ "doubleSided" : true,
+ "name" : "light",
+ "pbrMetallicRoughness" : {
+ "baseColorFactor" : [
+ 0.800000011920929,
+ 0.800000011920929,
+ 0.800000011920929,
+ 1
+ ],
+ "metallicFactor" : 0,
+ "roughnessFactor" : 0.5
+ }
+ },
+ {
+ "alphaMode" : "BLEND",
+ "doubleSided" : true,
+ "name" : "lighthouse_baked",
+ "normalTexture" : {
+ "index" : 0
+ },
+ "pbrMetallicRoughness" : {
+ "baseColorTexture" : {
+ "index" : 1
+ },
+ "metallicFactor" : 0,
+ "metallicRoughnessTexture" : {
+ "index" : 2
+ }
+ }
+ }
+ ],
+ "meshes" : [
+ {
+ "name" : "Cylinder.001",
+ "primitives" : [
+ {
+ "attributes" : {
+ "POSITION" : 0,
+ "NORMAL" : 1,
+ "TEXCOORD_0" : 2
+ },
+ "indices" : 3,
+ "material" : 0
+ },
+ {
+ "attributes" : {
+ "POSITION" : 4,
+ "NORMAL" : 5,
+ "TEXCOORD_0" : 6
+ },
+ "indices" : 7,
+ "material" : 1
+ }
+ ]
+ },
+ {
+ "name" : "Cylinder",
+ "primitives" : [
+ {
+ "attributes" : {
+ "POSITION" : 8,
+ "NORMAL" : 9,
+ "TEXCOORD_0" : 10
+ },
+ "indices" : 11,
+ "material" : 2
+ }
+ ]
+ }
+ ],
+ "textures" : [
+ {
+ "sampler" : 0,
+ "source" : 0
+ },
+ {
+ "sampler" : 0,
+ "source" : 1
+ },
+ {
+ "sampler" : 0,
+ "source" : 2
+ }
+ ],
+ "images" : [
+ {
+ "mimeType" : "image/png",
+ "name" : "lighthouse_normal",
+ "uri" : "lighthouse_normal.png"
+ },
+ {
+ "mimeType" : "image/png",
+ "name" : "lighthouse_color.png-lighthouse_alpha.png",
+ "uri" : "lighthouse_color_png-lighthouse_alpha_png.png"
+ },
+ {
+ "mimeType" : "image/png",
+ "name" : "lighthouse_roughness",
+ "uri" : "lighthouse_roughness.png"
+ }
+ ],
+ "accessors" : [
+ {
+ "bufferView" : 0,
+ "componentType" : 5126,
+ "count" : 210,
+ "max" : [
+ 5.64951229095459,
+ 4.4629106521606445,
+ 13.288947105407715
+ ],
+ "min" : [
+ -6.005587577819824,
+ -4.4629106521606445,
+ -4.4629106521606445
+ ],
+ "type" : "VEC3"
+ },
+ {
+ "bufferView" : 1,
+ "componentType" : 5126,
+ "count" : 210,
+ "type" : "VEC3"
+ },
+ {
+ "bufferView" : 2,
+ "componentType" : 5126,
+ "count" : 210,
+ "type" : "VEC2"
+ },
+ {
+ "bufferView" : 3,
+ "componentType" : 5123,
+ "count" : 552,
+ "type" : "SCALAR"
+ },
+ {
+ "bufferView" : 4,
+ "componentType" : 5126,
+ "count" : 32,
+ "max" : [
+ 3.8446998596191406,
+ 3.766223430633545,
+ 3.8446998596191406
+ ],
+ "min" : [
+ -3.8446998596191406,
+ -3.766223430633545,
+ -3.8446998596191406
+ ],
+ "type" : "VEC3"
+ },
+ {
+ "bufferView" : 5,
+ "componentType" : 5126,
+ "count" : 32,
+ "type" : "VEC3"
+ },
+ {
+ "bufferView" : 6,
+ "componentType" : 5126,
+ "count" : 32,
+ "type" : "VEC2"
+ },
+ {
+ "bufferView" : 7,
+ "componentType" : 5123,
+ "count" : 84,
+ "type" : "SCALAR"
+ },
+ {
+ "bufferView" : 8,
+ "componentType" : 5126,
+ "count" : 1799,
+ "max" : [
+ 17.421993255615234,
+ 220.5261993408203,
+ 17.421993255615234
+ ],
+ "min" : [
+ -17.421993255615234,
+ -1.8970633391290903e-05,
+ -17.421993255615234
+ ],
+ "type" : "VEC3"
+ },
+ {
+ "bufferView" : 9,
+ "componentType" : 5126,
+ "count" : 1799,
+ "type" : "VEC3"
+ },
+ {
+ "bufferView" : 10,
+ "componentType" : 5126,
+ "count" : 1799,
+ "type" : "VEC2"
+ },
+ {
+ "bufferView" : 11,
+ "componentType" : 5123,
+ "count" : 6324,
+ "type" : "SCALAR"
+ }
+ ],
+ "bufferViews" : [
+ {
+ "buffer" : 0,
+ "byteLength" : 2520,
+ "byteOffset" : 0
+ },
+ {
+ "buffer" : 0,
+ "byteLength" : 2520,
+ "byteOffset" : 2520
+ },
+ {
+ "buffer" : 0,
+ "byteLength" : 1680,
+ "byteOffset" : 5040
+ },
+ {
+ "buffer" : 0,
+ "byteLength" : 1104,
+ "byteOffset" : 6720
+ },
+ {
+ "buffer" : 0,
+ "byteLength" : 384,
+ "byteOffset" : 7824
+ },
+ {
+ "buffer" : 0,
+ "byteLength" : 384,
+ "byteOffset" : 8208
+ },
+ {
+ "buffer" : 0,
+ "byteLength" : 256,
+ "byteOffset" : 8592
+ },
+ {
+ "buffer" : 0,
+ "byteLength" : 168,
+ "byteOffset" : 8848
+ },
+ {
+ "buffer" : 0,
+ "byteLength" : 21588,
+ "byteOffset" : 9016
+ },
+ {
+ "buffer" : 0,
+ "byteLength" : 21588,
+ "byteOffset" : 30604
+ },
+ {
+ "buffer" : 0,
+ "byteLength" : 14392,
+ "byteOffset" : 52192
+ },
+ {
+ "buffer" : 0,
+ "byteLength" : 12648,
+ "byteOffset" : 66584
+ }
+ ],
+ "samplers" : [
+ {
+ "magFilter" : 9729,
+ "minFilter" : 9987
+ }
+ ],
+ "buffers" : [
+ {
+ "byteLength" : 79232,
+ "uri" : "lighthouse.bin"
+ }
+ ]
+}
diff --git a/world/monuments/lighthouse/lighthouse.gltf.import b/world/monuments/lighthouse/lighthouse.gltf.import
new file mode 100644
index 0000000..a3fec4e
--- /dev/null
+++ b/world/monuments/lighthouse/lighthouse.gltf.import
@@ -0,0 +1,1065 @@
+[remap]
+
+importer="scene"
+type="PackedScene"
+path="res://.import/lighthouse.gltf-348510f5a2683ba7ecc55d0138589c98.scn"
+
+[deps]
+
+source_file="res://world/monuments/lighthouse/lighthouse.gltf"
+dest_files=[ "res://.import/lighthouse.gltf-348510f5a2683ba7ecc55d0138589c98.scn" ]
+
+[params]
+
+nodes/root_type="Spatial"
+nodes/root_name="Scene Root"
+nodes/root_scale=1.0
+nodes/custom_script=""
+nodes/storage=0
+nodes/use_legacy_names=false
+materials/location=1
+materials/storage=1
+materials/keep_on_reimport=true
+meshes/octahedral_compression=true
+meshes/compress=4286
+meshes/ensure_tangents=true
+meshes/storage=0
+meshes/light_baking=0
+meshes/lightmap_texel_size=0.1
+skins/use_named_skins=true
+external_files/store_in_subdir=false
+animation/import=true
+animation/fps=15
+animation/filter_script=""
+animation/storage=false
+animation/keep_custom_tracks=false
+animation/optimizer/enabled=true
+animation/optimizer/max_linear_error=0.05
+animation/optimizer/max_angular_error=0.01
+animation/optimizer/max_angle=22
+animation/optimizer/remove_unused_tracks=true
+animation/clips/amount=0
+animation/clip_1/name=""
+animation/clip_1/start_frame=0
+animation/clip_1/end_frame=0
+animation/clip_1/loops=false
+animation/clip_2/name=""
+animation/clip_2/start_frame=0
+animation/clip_2/end_frame=0
+animation/clip_2/loops=false
+animation/clip_3/name=""
+animation/clip_3/start_frame=0
+animation/clip_3/end_frame=0
+animation/clip_3/loops=false
+animation/clip_4/name=""
+animation/clip_4/start_frame=0
+animation/clip_4/end_frame=0
+animation/clip_4/loops=false
+animation/clip_5/name=""
+animation/clip_5/start_frame=0
+animation/clip_5/end_frame=0
+animation/clip_5/loops=false
+animation/clip_6/name=""
+animation/clip_6/start_frame=0
+animation/clip_6/end_frame=0
+animation/clip_6/loops=false
+animation/clip_7/name=""
+animation/clip_7/start_frame=0
+animation/clip_7/end_frame=0
+animation/clip_7/loops=false
+animation/clip_8/name=""
+animation/clip_8/start_frame=0
+animation/clip_8/end_frame=0
+animation/clip_8/loops=false
+animation/clip_9/name=""
+animation/clip_9/start_frame=0
+animation/clip_9/end_frame=0
+animation/clip_9/loops=false
+animation/clip_10/name=""
+animation/clip_10/start_frame=0
+animation/clip_10/end_frame=0
+animation/clip_10/loops=false
+animation/clip_11/name=""
+animation/clip_11/start_frame=0
+animation/clip_11/end_frame=0
+animation/clip_11/loops=false
+animation/clip_12/name=""
+animation/clip_12/start_frame=0
+animation/clip_12/end_frame=0
+animation/clip_12/loops=false
+animation/clip_13/name=""
+animation/clip_13/start_frame=0
+animation/clip_13/end_frame=0
+animation/clip_13/loops=false
+animation/clip_14/name=""
+animation/clip_14/start_frame=0
+animation/clip_14/end_frame=0
+animation/clip_14/loops=false
+animation/clip_15/name=""
+animation/clip_15/start_frame=0
+animation/clip_15/end_frame=0
+animation/clip_15/loops=false
+animation/clip_16/name=""
+animation/clip_16/start_frame=0
+animation/clip_16/end_frame=0
+animation/clip_16/loops=false
+animation/clip_17/name=""
+animation/clip_17/start_frame=0
+animation/clip_17/end_frame=0
+animation/clip_17/loops=false
+animation/clip_18/name=""
+animation/clip_18/start_frame=0
+animation/clip_18/end_frame=0
+animation/clip_18/loops=false
+animation/clip_19/name=""
+animation/clip_19/start_frame=0
+animation/clip_19/end_frame=0
+animation/clip_19/loops=false
+animation/clip_20/name=""
+animation/clip_20/start_frame=0
+animation/clip_20/end_frame=0
+animation/clip_20/loops=false
+animation/clip_21/name=""
+animation/clip_21/start_frame=0
+animation/clip_21/end_frame=0
+animation/clip_21/loops=false
+animation/clip_22/name=""
+animation/clip_22/start_frame=0
+animation/clip_22/end_frame=0
+animation/clip_22/loops=false
+animation/clip_23/name=""
+animation/clip_23/start_frame=0
+animation/clip_23/end_frame=0
+animation/clip_23/loops=false
+animation/clip_24/name=""
+animation/clip_24/start_frame=0
+animation/clip_24/end_frame=0
+animation/clip_24/loops=false
+animation/clip_25/name=""
+animation/clip_25/start_frame=0
+animation/clip_25/end_frame=0
+animation/clip_25/loops=false
+animation/clip_26/name=""
+animation/clip_26/start_frame=0
+animation/clip_26/end_frame=0
+animation/clip_26/loops=false
+animation/clip_27/name=""
+animation/clip_27/start_frame=0
+animation/clip_27/end_frame=0
+animation/clip_27/loops=false
+animation/clip_28/name=""
+animation/clip_28/start_frame=0
+animation/clip_28/end_frame=0
+animation/clip_28/loops=false
+animation/clip_29/name=""
+animation/clip_29/start_frame=0
+animation/clip_29/end_frame=0
+animation/clip_29/loops=false
+animation/clip_30/name=""
+animation/clip_30/start_frame=0
+animation/clip_30/end_frame=0
+animation/clip_30/loops=false
+animation/clip_31/name=""
+animation/clip_31/start_frame=0
+animation/clip_31/end_frame=0
+animation/clip_31/loops=false
+animation/clip_32/name=""
+animation/clip_32/start_frame=0
+animation/clip_32/end_frame=0
+animation/clip_32/loops=false
+animation/clip_33/name=""
+animation/clip_33/start_frame=0
+animation/clip_33/end_frame=0
+animation/clip_33/loops=false
+animation/clip_34/name=""
+animation/clip_34/start_frame=0
+animation/clip_34/end_frame=0
+animation/clip_34/loops=false
+animation/clip_35/name=""
+animation/clip_35/start_frame=0
+animation/clip_35/end_frame=0
+animation/clip_35/loops=false
+animation/clip_36/name=""
+animation/clip_36/start_frame=0
+animation/clip_36/end_frame=0
+animation/clip_36/loops=false
+animation/clip_37/name=""
+animation/clip_37/start_frame=0
+animation/clip_37/end_frame=0
+animation/clip_37/loops=false
+animation/clip_38/name=""
+animation/clip_38/start_frame=0
+animation/clip_38/end_frame=0
+animation/clip_38/loops=false
+animation/clip_39/name=""
+animation/clip_39/start_frame=0
+animation/clip_39/end_frame=0
+animation/clip_39/loops=false
+animation/clip_40/name=""
+animation/clip_40/start_frame=0
+animation/clip_40/end_frame=0
+animation/clip_40/loops=false
+animation/clip_41/name=""
+animation/clip_41/start_frame=0
+animation/clip_41/end_frame=0
+animation/clip_41/loops=false
+animation/clip_42/name=""
+animation/clip_42/start_frame=0
+animation/clip_42/end_frame=0
+animation/clip_42/loops=false
+animation/clip_43/name=""
+animation/clip_43/start_frame=0
+animation/clip_43/end_frame=0
+animation/clip_43/loops=false
+animation/clip_44/name=""
+animation/clip_44/start_frame=0
+animation/clip_44/end_frame=0
+animation/clip_44/loops=false
+animation/clip_45/name=""
+animation/clip_45/start_frame=0
+animation/clip_45/end_frame=0
+animation/clip_45/loops=false
+animation/clip_46/name=""
+animation/clip_46/start_frame=0
+animation/clip_46/end_frame=0
+animation/clip_46/loops=false
+animation/clip_47/name=""
+animation/clip_47/start_frame=0
+animation/clip_47/end_frame=0
+animation/clip_47/loops=false
+animation/clip_48/name=""
+animation/clip_48/start_frame=0
+animation/clip_48/end_frame=0
+animation/clip_48/loops=false
+animation/clip_49/name=""
+animation/clip_49/start_frame=0
+animation/clip_49/end_frame=0
+animation/clip_49/loops=false
+animation/clip_50/name=""
+animation/clip_50/start_frame=0
+animation/clip_50/end_frame=0
+animation/clip_50/loops=false
+animation/clip_51/name=""
+animation/clip_51/start_frame=0
+animation/clip_51/end_frame=0
+animation/clip_51/loops=false
+animation/clip_52/name=""
+animation/clip_52/start_frame=0
+animation/clip_52/end_frame=0
+animation/clip_52/loops=false
+animation/clip_53/name=""
+animation/clip_53/start_frame=0
+animation/clip_53/end_frame=0
+animation/clip_53/loops=false
+animation/clip_54/name=""
+animation/clip_54/start_frame=0
+animation/clip_54/end_frame=0
+animation/clip_54/loops=false
+animation/clip_55/name=""
+animation/clip_55/start_frame=0
+animation/clip_55/end_frame=0
+animation/clip_55/loops=false
+animation/clip_56/name=""
+animation/clip_56/start_frame=0
+animation/clip_56/end_frame=0
+animation/clip_56/loops=false
+animation/clip_57/name=""
+animation/clip_57/start_frame=0
+animation/clip_57/end_frame=0
+animation/clip_57/loops=false
+animation/clip_58/name=""
+animation/clip_58/start_frame=0
+animation/clip_58/end_frame=0
+animation/clip_58/loops=false
+animation/clip_59/name=""
+animation/clip_59/start_frame=0
+animation/clip_59/end_frame=0
+animation/clip_59/loops=false
+animation/clip_60/name=""
+animation/clip_60/start_frame=0
+animation/clip_60/end_frame=0
+animation/clip_60/loops=false
+animation/clip_61/name=""
+animation/clip_61/start_frame=0
+animation/clip_61/end_frame=0
+animation/clip_61/loops=false
+animation/clip_62/name=""
+animation/clip_62/start_frame=0
+animation/clip_62/end_frame=0
+animation/clip_62/loops=false
+animation/clip_63/name=""
+animation/clip_63/start_frame=0
+animation/clip_63/end_frame=0
+animation/clip_63/loops=false
+animation/clip_64/name=""
+animation/clip_64/start_frame=0
+animation/clip_64/end_frame=0
+animation/clip_64/loops=false
+animation/clip_65/name=""
+animation/clip_65/start_frame=0
+animation/clip_65/end_frame=0
+animation/clip_65/loops=false
+animation/clip_66/name=""
+animation/clip_66/start_frame=0
+animation/clip_66/end_frame=0
+animation/clip_66/loops=false
+animation/clip_67/name=""
+animation/clip_67/start_frame=0
+animation/clip_67/end_frame=0
+animation/clip_67/loops=false
+animation/clip_68/name=""
+animation/clip_68/start_frame=0
+animation/clip_68/end_frame=0
+animation/clip_68/loops=false
+animation/clip_69/name=""
+animation/clip_69/start_frame=0
+animation/clip_69/end_frame=0
+animation/clip_69/loops=false
+animation/clip_70/name=""
+animation/clip_70/start_frame=0
+animation/clip_70/end_frame=0
+animation/clip_70/loops=false
+animation/clip_71/name=""
+animation/clip_71/start_frame=0
+animation/clip_71/end_frame=0
+animation/clip_71/loops=false
+animation/clip_72/name=""
+animation/clip_72/start_frame=0
+animation/clip_72/end_frame=0
+animation/clip_72/loops=false
+animation/clip_73/name=""
+animation/clip_73/start_frame=0
+animation/clip_73/end_frame=0
+animation/clip_73/loops=false
+animation/clip_74/name=""
+animation/clip_74/start_frame=0
+animation/clip_74/end_frame=0
+animation/clip_74/loops=false
+animation/clip_75/name=""
+animation/clip_75/start_frame=0
+animation/clip_75/end_frame=0
+animation/clip_75/loops=false
+animation/clip_76/name=""
+animation/clip_76/start_frame=0
+animation/clip_76/end_frame=0
+animation/clip_76/loops=false
+animation/clip_77/name=""
+animation/clip_77/start_frame=0
+animation/clip_77/end_frame=0
+animation/clip_77/loops=false
+animation/clip_78/name=""
+animation/clip_78/start_frame=0
+animation/clip_78/end_frame=0
+animation/clip_78/loops=false
+animation/clip_79/name=""
+animation/clip_79/start_frame=0
+animation/clip_79/end_frame=0
+animation/clip_79/loops=false
+animation/clip_80/name=""
+animation/clip_80/start_frame=0
+animation/clip_80/end_frame=0
+animation/clip_80/loops=false
+animation/clip_81/name=""
+animation/clip_81/start_frame=0
+animation/clip_81/end_frame=0
+animation/clip_81/loops=false
+animation/clip_82/name=""
+animation/clip_82/start_frame=0
+animation/clip_82/end_frame=0
+animation/clip_82/loops=false
+animation/clip_83/name=""
+animation/clip_83/start_frame=0
+animation/clip_83/end_frame=0
+animation/clip_83/loops=false
+animation/clip_84/name=""
+animation/clip_84/start_frame=0
+animation/clip_84/end_frame=0
+animation/clip_84/loops=false
+animation/clip_85/name=""
+animation/clip_85/start_frame=0
+animation/clip_85/end_frame=0
+animation/clip_85/loops=false
+animation/clip_86/name=""
+animation/clip_86/start_frame=0
+animation/clip_86/end_frame=0
+animation/clip_86/loops=false
+animation/clip_87/name=""
+animation/clip_87/start_frame=0
+animation/clip_87/end_frame=0
+animation/clip_87/loops=false
+animation/clip_88/name=""
+animation/clip_88/start_frame=0
+animation/clip_88/end_frame=0
+animation/clip_88/loops=false
+animation/clip_89/name=""
+animation/clip_89/start_frame=0
+animation/clip_89/end_frame=0
+animation/clip_89/loops=false
+animation/clip_90/name=""
+animation/clip_90/start_frame=0
+animation/clip_90/end_frame=0
+animation/clip_90/loops=false
+animation/clip_91/name=""
+animation/clip_91/start_frame=0
+animation/clip_91/end_frame=0
+animation/clip_91/loops=false
+animation/clip_92/name=""
+animation/clip_92/start_frame=0
+animation/clip_92/end_frame=0
+animation/clip_92/loops=false
+animation/clip_93/name=""
+animation/clip_93/start_frame=0
+animation/clip_93/end_frame=0
+animation/clip_93/loops=false
+animation/clip_94/name=""
+animation/clip_94/start_frame=0
+animation/clip_94/end_frame=0
+animation/clip_94/loops=false
+animation/clip_95/name=""
+animation/clip_95/start_frame=0
+animation/clip_95/end_frame=0
+animation/clip_95/loops=false
+animation/clip_96/name=""
+animation/clip_96/start_frame=0
+animation/clip_96/end_frame=0
+animation/clip_96/loops=false
+animation/clip_97/name=""
+animation/clip_97/start_frame=0
+animation/clip_97/end_frame=0
+animation/clip_97/loops=false
+animation/clip_98/name=""
+animation/clip_98/start_frame=0
+animation/clip_98/end_frame=0
+animation/clip_98/loops=false
+animation/clip_99/name=""
+animation/clip_99/start_frame=0
+animation/clip_99/end_frame=0
+animation/clip_99/loops=false
+animation/clip_100/name=""
+animation/clip_100/start_frame=0
+animation/clip_100/end_frame=0
+animation/clip_100/loops=false
+animation/clip_101/name=""
+animation/clip_101/start_frame=0
+animation/clip_101/end_frame=0
+animation/clip_101/loops=false
+animation/clip_102/name=""
+animation/clip_102/start_frame=0
+animation/clip_102/end_frame=0
+animation/clip_102/loops=false
+animation/clip_103/name=""
+animation/clip_103/start_frame=0
+animation/clip_103/end_frame=0
+animation/clip_103/loops=false
+animation/clip_104/name=""
+animation/clip_104/start_frame=0
+animation/clip_104/end_frame=0
+animation/clip_104/loops=false
+animation/clip_105/name=""
+animation/clip_105/start_frame=0
+animation/clip_105/end_frame=0
+animation/clip_105/loops=false
+animation/clip_106/name=""
+animation/clip_106/start_frame=0
+animation/clip_106/end_frame=0
+animation/clip_106/loops=false
+animation/clip_107/name=""
+animation/clip_107/start_frame=0
+animation/clip_107/end_frame=0
+animation/clip_107/loops=false
+animation/clip_108/name=""
+animation/clip_108/start_frame=0
+animation/clip_108/end_frame=0
+animation/clip_108/loops=false
+animation/clip_109/name=""
+animation/clip_109/start_frame=0
+animation/clip_109/end_frame=0
+animation/clip_109/loops=false
+animation/clip_110/name=""
+animation/clip_110/start_frame=0
+animation/clip_110/end_frame=0
+animation/clip_110/loops=false
+animation/clip_111/name=""
+animation/clip_111/start_frame=0
+animation/clip_111/end_frame=0
+animation/clip_111/loops=false
+animation/clip_112/name=""
+animation/clip_112/start_frame=0
+animation/clip_112/end_frame=0
+animation/clip_112/loops=false
+animation/clip_113/name=""
+animation/clip_113/start_frame=0
+animation/clip_113/end_frame=0
+animation/clip_113/loops=false
+animation/clip_114/name=""
+animation/clip_114/start_frame=0
+animation/clip_114/end_frame=0
+animation/clip_114/loops=false
+animation/clip_115/name=""
+animation/clip_115/start_frame=0
+animation/clip_115/end_frame=0
+animation/clip_115/loops=false
+animation/clip_116/name=""
+animation/clip_116/start_frame=0
+animation/clip_116/end_frame=0
+animation/clip_116/loops=false
+animation/clip_117/name=""
+animation/clip_117/start_frame=0
+animation/clip_117/end_frame=0
+animation/clip_117/loops=false
+animation/clip_118/name=""
+animation/clip_118/start_frame=0
+animation/clip_118/end_frame=0
+animation/clip_118/loops=false
+animation/clip_119/name=""
+animation/clip_119/start_frame=0
+animation/clip_119/end_frame=0
+animation/clip_119/loops=false
+animation/clip_120/name=""
+animation/clip_120/start_frame=0
+animation/clip_120/end_frame=0
+animation/clip_120/loops=false
+animation/clip_121/name=""
+animation/clip_121/start_frame=0
+animation/clip_121/end_frame=0
+animation/clip_121/loops=false
+animation/clip_122/name=""
+animation/clip_122/start_frame=0
+animation/clip_122/end_frame=0
+animation/clip_122/loops=false
+animation/clip_123/name=""
+animation/clip_123/start_frame=0
+animation/clip_123/end_frame=0
+animation/clip_123/loops=false
+animation/clip_124/name=""
+animation/clip_124/start_frame=0
+animation/clip_124/end_frame=0
+animation/clip_124/loops=false
+animation/clip_125/name=""
+animation/clip_125/start_frame=0
+animation/clip_125/end_frame=0
+animation/clip_125/loops=false
+animation/clip_126/name=""
+animation/clip_126/start_frame=0
+animation/clip_126/end_frame=0
+animation/clip_126/loops=false
+animation/clip_127/name=""
+animation/clip_127/start_frame=0
+animation/clip_127/end_frame=0
+animation/clip_127/loops=false
+animation/clip_128/name=""
+animation/clip_128/start_frame=0
+animation/clip_128/end_frame=0
+animation/clip_128/loops=false
+animation/clip_129/name=""
+animation/clip_129/start_frame=0
+animation/clip_129/end_frame=0
+animation/clip_129/loops=false
+animation/clip_130/name=""
+animation/clip_130/start_frame=0
+animation/clip_130/end_frame=0
+animation/clip_130/loops=false
+animation/clip_131/name=""
+animation/clip_131/start_frame=0
+animation/clip_131/end_frame=0
+animation/clip_131/loops=false
+animation/clip_132/name=""
+animation/clip_132/start_frame=0
+animation/clip_132/end_frame=0
+animation/clip_132/loops=false
+animation/clip_133/name=""
+animation/clip_133/start_frame=0
+animation/clip_133/end_frame=0
+animation/clip_133/loops=false
+animation/clip_134/name=""
+animation/clip_134/start_frame=0
+animation/clip_134/end_frame=0
+animation/clip_134/loops=false
+animation/clip_135/name=""
+animation/clip_135/start_frame=0
+animation/clip_135/end_frame=0
+animation/clip_135/loops=false
+animation/clip_136/name=""
+animation/clip_136/start_frame=0
+animation/clip_136/end_frame=0
+animation/clip_136/loops=false
+animation/clip_137/name=""
+animation/clip_137/start_frame=0
+animation/clip_137/end_frame=0
+animation/clip_137/loops=false
+animation/clip_138/name=""
+animation/clip_138/start_frame=0
+animation/clip_138/end_frame=0
+animation/clip_138/loops=false
+animation/clip_139/name=""
+animation/clip_139/start_frame=0
+animation/clip_139/end_frame=0
+animation/clip_139/loops=false
+animation/clip_140/name=""
+animation/clip_140/start_frame=0
+animation/clip_140/end_frame=0
+animation/clip_140/loops=false
+animation/clip_141/name=""
+animation/clip_141/start_frame=0
+animation/clip_141/end_frame=0
+animation/clip_141/loops=false
+animation/clip_142/name=""
+animation/clip_142/start_frame=0
+animation/clip_142/end_frame=0
+animation/clip_142/loops=false
+animation/clip_143/name=""
+animation/clip_143/start_frame=0
+animation/clip_143/end_frame=0
+animation/clip_143/loops=false
+animation/clip_144/name=""
+animation/clip_144/start_frame=0
+animation/clip_144/end_frame=0
+animation/clip_144/loops=false
+animation/clip_145/name=""
+animation/clip_145/start_frame=0
+animation/clip_145/end_frame=0
+animation/clip_145/loops=false
+animation/clip_146/name=""
+animation/clip_146/start_frame=0
+animation/clip_146/end_frame=0
+animation/clip_146/loops=false
+animation/clip_147/name=""
+animation/clip_147/start_frame=0
+animation/clip_147/end_frame=0
+animation/clip_147/loops=false
+animation/clip_148/name=""
+animation/clip_148/start_frame=0
+animation/clip_148/end_frame=0
+animation/clip_148/loops=false
+animation/clip_149/name=""
+animation/clip_149/start_frame=0
+animation/clip_149/end_frame=0
+animation/clip_149/loops=false
+animation/clip_150/name=""
+animation/clip_150/start_frame=0
+animation/clip_150/end_frame=0
+animation/clip_150/loops=false
+animation/clip_151/name=""
+animation/clip_151/start_frame=0
+animation/clip_151/end_frame=0
+animation/clip_151/loops=false
+animation/clip_152/name=""
+animation/clip_152/start_frame=0
+animation/clip_152/end_frame=0
+animation/clip_152/loops=false
+animation/clip_153/name=""
+animation/clip_153/start_frame=0
+animation/clip_153/end_frame=0
+animation/clip_153/loops=false
+animation/clip_154/name=""
+animation/clip_154/start_frame=0
+animation/clip_154/end_frame=0
+animation/clip_154/loops=false
+animation/clip_155/name=""
+animation/clip_155/start_frame=0
+animation/clip_155/end_frame=0
+animation/clip_155/loops=false
+animation/clip_156/name=""
+animation/clip_156/start_frame=0
+animation/clip_156/end_frame=0
+animation/clip_156/loops=false
+animation/clip_157/name=""
+animation/clip_157/start_frame=0
+animation/clip_157/end_frame=0
+animation/clip_157/loops=false
+animation/clip_158/name=""
+animation/clip_158/start_frame=0
+animation/clip_158/end_frame=0
+animation/clip_158/loops=false
+animation/clip_159/name=""
+animation/clip_159/start_frame=0
+animation/clip_159/end_frame=0
+animation/clip_159/loops=false
+animation/clip_160/name=""
+animation/clip_160/start_frame=0
+animation/clip_160/end_frame=0
+animation/clip_160/loops=false
+animation/clip_161/name=""
+animation/clip_161/start_frame=0
+animation/clip_161/end_frame=0
+animation/clip_161/loops=false
+animation/clip_162/name=""
+animation/clip_162/start_frame=0
+animation/clip_162/end_frame=0
+animation/clip_162/loops=false
+animation/clip_163/name=""
+animation/clip_163/start_frame=0
+animation/clip_163/end_frame=0
+animation/clip_163/loops=false
+animation/clip_164/name=""
+animation/clip_164/start_frame=0
+animation/clip_164/end_frame=0
+animation/clip_164/loops=false
+animation/clip_165/name=""
+animation/clip_165/start_frame=0
+animation/clip_165/end_frame=0
+animation/clip_165/loops=false
+animation/clip_166/name=""
+animation/clip_166/start_frame=0
+animation/clip_166/end_frame=0
+animation/clip_166/loops=false
+animation/clip_167/name=""
+animation/clip_167/start_frame=0
+animation/clip_167/end_frame=0
+animation/clip_167/loops=false
+animation/clip_168/name=""
+animation/clip_168/start_frame=0
+animation/clip_168/end_frame=0
+animation/clip_168/loops=false
+animation/clip_169/name=""
+animation/clip_169/start_frame=0
+animation/clip_169/end_frame=0
+animation/clip_169/loops=false
+animation/clip_170/name=""
+animation/clip_170/start_frame=0
+animation/clip_170/end_frame=0
+animation/clip_170/loops=false
+animation/clip_171/name=""
+animation/clip_171/start_frame=0
+animation/clip_171/end_frame=0
+animation/clip_171/loops=false
+animation/clip_172/name=""
+animation/clip_172/start_frame=0
+animation/clip_172/end_frame=0
+animation/clip_172/loops=false
+animation/clip_173/name=""
+animation/clip_173/start_frame=0
+animation/clip_173/end_frame=0
+animation/clip_173/loops=false
+animation/clip_174/name=""
+animation/clip_174/start_frame=0
+animation/clip_174/end_frame=0
+animation/clip_174/loops=false
+animation/clip_175/name=""
+animation/clip_175/start_frame=0
+animation/clip_175/end_frame=0
+animation/clip_175/loops=false
+animation/clip_176/name=""
+animation/clip_176/start_frame=0
+animation/clip_176/end_frame=0
+animation/clip_176/loops=false
+animation/clip_177/name=""
+animation/clip_177/start_frame=0
+animation/clip_177/end_frame=0
+animation/clip_177/loops=false
+animation/clip_178/name=""
+animation/clip_178/start_frame=0
+animation/clip_178/end_frame=0
+animation/clip_178/loops=false
+animation/clip_179/name=""
+animation/clip_179/start_frame=0
+animation/clip_179/end_frame=0
+animation/clip_179/loops=false
+animation/clip_180/name=""
+animation/clip_180/start_frame=0
+animation/clip_180/end_frame=0
+animation/clip_180/loops=false
+animation/clip_181/name=""
+animation/clip_181/start_frame=0
+animation/clip_181/end_frame=0
+animation/clip_181/loops=false
+animation/clip_182/name=""
+animation/clip_182/start_frame=0
+animation/clip_182/end_frame=0
+animation/clip_182/loops=false
+animation/clip_183/name=""
+animation/clip_183/start_frame=0
+animation/clip_183/end_frame=0
+animation/clip_183/loops=false
+animation/clip_184/name=""
+animation/clip_184/start_frame=0
+animation/clip_184/end_frame=0
+animation/clip_184/loops=false
+animation/clip_185/name=""
+animation/clip_185/start_frame=0
+animation/clip_185/end_frame=0
+animation/clip_185/loops=false
+animation/clip_186/name=""
+animation/clip_186/start_frame=0
+animation/clip_186/end_frame=0
+animation/clip_186/loops=false
+animation/clip_187/name=""
+animation/clip_187/start_frame=0
+animation/clip_187/end_frame=0
+animation/clip_187/loops=false
+animation/clip_188/name=""
+animation/clip_188/start_frame=0
+animation/clip_188/end_frame=0
+animation/clip_188/loops=false
+animation/clip_189/name=""
+animation/clip_189/start_frame=0
+animation/clip_189/end_frame=0
+animation/clip_189/loops=false
+animation/clip_190/name=""
+animation/clip_190/start_frame=0
+animation/clip_190/end_frame=0
+animation/clip_190/loops=false
+animation/clip_191/name=""
+animation/clip_191/start_frame=0
+animation/clip_191/end_frame=0
+animation/clip_191/loops=false
+animation/clip_192/name=""
+animation/clip_192/start_frame=0
+animation/clip_192/end_frame=0
+animation/clip_192/loops=false
+animation/clip_193/name=""
+animation/clip_193/start_frame=0
+animation/clip_193/end_frame=0
+animation/clip_193/loops=false
+animation/clip_194/name=""
+animation/clip_194/start_frame=0
+animation/clip_194/end_frame=0
+animation/clip_194/loops=false
+animation/clip_195/name=""
+animation/clip_195/start_frame=0
+animation/clip_195/end_frame=0
+animation/clip_195/loops=false
+animation/clip_196/name=""
+animation/clip_196/start_frame=0
+animation/clip_196/end_frame=0
+animation/clip_196/loops=false
+animation/clip_197/name=""
+animation/clip_197/start_frame=0
+animation/clip_197/end_frame=0
+animation/clip_197/loops=false
+animation/clip_198/name=""
+animation/clip_198/start_frame=0
+animation/clip_198/end_frame=0
+animation/clip_198/loops=false
+animation/clip_199/name=""
+animation/clip_199/start_frame=0
+animation/clip_199/end_frame=0
+animation/clip_199/loops=false
+animation/clip_200/name=""
+animation/clip_200/start_frame=0
+animation/clip_200/end_frame=0
+animation/clip_200/loops=false
+animation/clip_201/name=""
+animation/clip_201/start_frame=0
+animation/clip_201/end_frame=0
+animation/clip_201/loops=false
+animation/clip_202/name=""
+animation/clip_202/start_frame=0
+animation/clip_202/end_frame=0
+animation/clip_202/loops=false
+animation/clip_203/name=""
+animation/clip_203/start_frame=0
+animation/clip_203/end_frame=0
+animation/clip_203/loops=false
+animation/clip_204/name=""
+animation/clip_204/start_frame=0
+animation/clip_204/end_frame=0
+animation/clip_204/loops=false
+animation/clip_205/name=""
+animation/clip_205/start_frame=0
+animation/clip_205/end_frame=0
+animation/clip_205/loops=false
+animation/clip_206/name=""
+animation/clip_206/start_frame=0
+animation/clip_206/end_frame=0
+animation/clip_206/loops=false
+animation/clip_207/name=""
+animation/clip_207/start_frame=0
+animation/clip_207/end_frame=0
+animation/clip_207/loops=false
+animation/clip_208/name=""
+animation/clip_208/start_frame=0
+animation/clip_208/end_frame=0
+animation/clip_208/loops=false
+animation/clip_209/name=""
+animation/clip_209/start_frame=0
+animation/clip_209/end_frame=0
+animation/clip_209/loops=false
+animation/clip_210/name=""
+animation/clip_210/start_frame=0
+animation/clip_210/end_frame=0
+animation/clip_210/loops=false
+animation/clip_211/name=""
+animation/clip_211/start_frame=0
+animation/clip_211/end_frame=0
+animation/clip_211/loops=false
+animation/clip_212/name=""
+animation/clip_212/start_frame=0
+animation/clip_212/end_frame=0
+animation/clip_212/loops=false
+animation/clip_213/name=""
+animation/clip_213/start_frame=0
+animation/clip_213/end_frame=0
+animation/clip_213/loops=false
+animation/clip_214/name=""
+animation/clip_214/start_frame=0
+animation/clip_214/end_frame=0
+animation/clip_214/loops=false
+animation/clip_215/name=""
+animation/clip_215/start_frame=0
+animation/clip_215/end_frame=0
+animation/clip_215/loops=false
+animation/clip_216/name=""
+animation/clip_216/start_frame=0
+animation/clip_216/end_frame=0
+animation/clip_216/loops=false
+animation/clip_217/name=""
+animation/clip_217/start_frame=0
+animation/clip_217/end_frame=0
+animation/clip_217/loops=false
+animation/clip_218/name=""
+animation/clip_218/start_frame=0
+animation/clip_218/end_frame=0
+animation/clip_218/loops=false
+animation/clip_219/name=""
+animation/clip_219/start_frame=0
+animation/clip_219/end_frame=0
+animation/clip_219/loops=false
+animation/clip_220/name=""
+animation/clip_220/start_frame=0
+animation/clip_220/end_frame=0
+animation/clip_220/loops=false
+animation/clip_221/name=""
+animation/clip_221/start_frame=0
+animation/clip_221/end_frame=0
+animation/clip_221/loops=false
+animation/clip_222/name=""
+animation/clip_222/start_frame=0
+animation/clip_222/end_frame=0
+animation/clip_222/loops=false
+animation/clip_223/name=""
+animation/clip_223/start_frame=0
+animation/clip_223/end_frame=0
+animation/clip_223/loops=false
+animation/clip_224/name=""
+animation/clip_224/start_frame=0
+animation/clip_224/end_frame=0
+animation/clip_224/loops=false
+animation/clip_225/name=""
+animation/clip_225/start_frame=0
+animation/clip_225/end_frame=0
+animation/clip_225/loops=false
+animation/clip_226/name=""
+animation/clip_226/start_frame=0
+animation/clip_226/end_frame=0
+animation/clip_226/loops=false
+animation/clip_227/name=""
+animation/clip_227/start_frame=0
+animation/clip_227/end_frame=0
+animation/clip_227/loops=false
+animation/clip_228/name=""
+animation/clip_228/start_frame=0
+animation/clip_228/end_frame=0
+animation/clip_228/loops=false
+animation/clip_229/name=""
+animation/clip_229/start_frame=0
+animation/clip_229/end_frame=0
+animation/clip_229/loops=false
+animation/clip_230/name=""
+animation/clip_230/start_frame=0
+animation/clip_230/end_frame=0
+animation/clip_230/loops=false
+animation/clip_231/name=""
+animation/clip_231/start_frame=0
+animation/clip_231/end_frame=0
+animation/clip_231/loops=false
+animation/clip_232/name=""
+animation/clip_232/start_frame=0
+animation/clip_232/end_frame=0
+animation/clip_232/loops=false
+animation/clip_233/name=""
+animation/clip_233/start_frame=0
+animation/clip_233/end_frame=0
+animation/clip_233/loops=false
+animation/clip_234/name=""
+animation/clip_234/start_frame=0
+animation/clip_234/end_frame=0
+animation/clip_234/loops=false
+animation/clip_235/name=""
+animation/clip_235/start_frame=0
+animation/clip_235/end_frame=0
+animation/clip_235/loops=false
+animation/clip_236/name=""
+animation/clip_236/start_frame=0
+animation/clip_236/end_frame=0
+animation/clip_236/loops=false
+animation/clip_237/name=""
+animation/clip_237/start_frame=0
+animation/clip_237/end_frame=0
+animation/clip_237/loops=false
+animation/clip_238/name=""
+animation/clip_238/start_frame=0
+animation/clip_238/end_frame=0
+animation/clip_238/loops=false
+animation/clip_239/name=""
+animation/clip_239/start_frame=0
+animation/clip_239/end_frame=0
+animation/clip_239/loops=false
+animation/clip_240/name=""
+animation/clip_240/start_frame=0
+animation/clip_240/end_frame=0
+animation/clip_240/loops=false
+animation/clip_241/name=""
+animation/clip_241/start_frame=0
+animation/clip_241/end_frame=0
+animation/clip_241/loops=false
+animation/clip_242/name=""
+animation/clip_242/start_frame=0
+animation/clip_242/end_frame=0
+animation/clip_242/loops=false
+animation/clip_243/name=""
+animation/clip_243/start_frame=0
+animation/clip_243/end_frame=0
+animation/clip_243/loops=false
+animation/clip_244/name=""
+animation/clip_244/start_frame=0
+animation/clip_244/end_frame=0
+animation/clip_244/loops=false
+animation/clip_245/name=""
+animation/clip_245/start_frame=0
+animation/clip_245/end_frame=0
+animation/clip_245/loops=false
+animation/clip_246/name=""
+animation/clip_246/start_frame=0
+animation/clip_246/end_frame=0
+animation/clip_246/loops=false
+animation/clip_247/name=""
+animation/clip_247/start_frame=0
+animation/clip_247/end_frame=0
+animation/clip_247/loops=false
+animation/clip_248/name=""
+animation/clip_248/start_frame=0
+animation/clip_248/end_frame=0
+animation/clip_248/loops=false
+animation/clip_249/name=""
+animation/clip_249/start_frame=0
+animation/clip_249/end_frame=0
+animation/clip_249/loops=false
+animation/clip_250/name=""
+animation/clip_250/start_frame=0
+animation/clip_250/end_frame=0
+animation/clip_250/loops=false
+animation/clip_251/name=""
+animation/clip_251/start_frame=0
+animation/clip_251/end_frame=0
+animation/clip_251/loops=false
+animation/clip_252/name=""
+animation/clip_252/start_frame=0
+animation/clip_252/end_frame=0
+animation/clip_252/loops=false
+animation/clip_253/name=""
+animation/clip_253/start_frame=0
+animation/clip_253/end_frame=0
+animation/clip_253/loops=false
+animation/clip_254/name=""
+animation/clip_254/start_frame=0
+animation/clip_254/end_frame=0
+animation/clip_254/loops=false
+animation/clip_255/name=""
+animation/clip_255/start_frame=0
+animation/clip_255/end_frame=0
+animation/clip_255/loops=false
+animation/clip_256/name=""
+animation/clip_256/start_frame=0
+animation/clip_256/end_frame=0
+animation/clip_256/loops=false
diff --git a/world/monuments/lighthouse/lighthouse.tscn b/world/monuments/lighthouse/lighthouse.tscn
new file mode 100644
index 0000000..7997649
--- /dev/null
+++ b/world/monuments/lighthouse/lighthouse.tscn
@@ -0,0 +1,64 @@
+[gd_scene load_steps=7 format=2]
+
+[ext_resource path="res://world/monuments/lighthouse/lighthouse.gltf" type="PackedScene" id=1]
+[ext_resource path="res://world/monuments/lighthouse/lighthouse.gd" type="Script" id=2]
+
+[sub_resource type="SpatialMaterial" id=1]
+albedo_color = Color( 0.0470588, 0.00392157, 0.00392157, 1 )
+
+[sub_resource type="SpatialMaterial" id=2]
+emission_enabled = true
+emission = Color( 1, 0.996078, 0.74902, 1 )
+emission_energy = 1.0
+emission_operator = 0
+emission_on_uv2 = false
+
+[sub_resource type="Animation" id=3]
+length = 0.001
+tracks/0/type = "value"
+tracks/0/path = NodePath("lighthouse/light:rotation_degrees")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector3( 90, 0, 0 ) ]
+}
+
+[sub_resource type="Animation" id=4]
+resource_name = "spin_light"
+length = 5.0
+loop = true
+tracks/0/type = "value"
+tracks/0/path = NodePath("lighthouse/light:rotation_degrees")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 5 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ Vector3( 90, 0, 0 ), Vector3( 90, 0, 360 ) ]
+}
+
+[node name="lighthouse" instance=ExtResource( 1 )]
+script = ExtResource( 2 )
+
+[node name="OmniLight" type="OmniLight" parent="." index="0"]
+transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 165.193, 0 )
+light_color = Color( 1, 0.92549, 0.768627, 1 )
+shadow_enabled = true
+omni_range = 76.7922
+
+[node name="light" parent="lighthouse" index="0"]
+transform = Transform( 1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 165.636, 0 )
+material/0 = SubResource( 1 )
+material/1 = SubResource( 2 )
+
+[node name="AnimationPlayer" type="AnimationPlayer" parent="." index="2"]
+anims/RESET = SubResource( 3 )
+anims/spin_light = SubResource( 4 )
diff --git a/world/monuments/lighthouse/lighthouse_alpha.png b/world/monuments/lighthouse/lighthouse_alpha.png
new file mode 100644
index 0000000..d53b738
--- /dev/null
+++ b/world/monuments/lighthouse/lighthouse_alpha.png
Binary files differ
diff --git a/world/monuments/lighthouse/lighthouse_alpha.png.import b/world/monuments/lighthouse/lighthouse_alpha.png.import
new file mode 100644
index 0000000..22b763e
--- /dev/null
+++ b/world/monuments/lighthouse/lighthouse_alpha.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/lighthouse_alpha.png-41f0ac1436cc9af220dfc8185e3a0320.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://world/monuments/lighthouse/lighthouse_alpha.png"
+dest_files=[ "res://.import/lighthouse_alpha.png-41f0ac1436cc9af220dfc8185e3a0320.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=true
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/world/monuments/lighthouse/lighthouse_baked.material b/world/monuments/lighthouse/lighthouse_baked.material
new file mode 100644
index 0000000..7b09edd
--- /dev/null
+++ b/world/monuments/lighthouse/lighthouse_baked.material
Binary files differ
diff --git a/world/monuments/lighthouse/lighthouse_color.png b/world/monuments/lighthouse/lighthouse_color.png
new file mode 100644
index 0000000..f0206d6
--- /dev/null
+++ b/world/monuments/lighthouse/lighthouse_color.png
Binary files differ
diff --git a/world/monuments/lighthouse/lighthouse_color.png.import b/world/monuments/lighthouse/lighthouse_color.png.import
new file mode 100644
index 0000000..2a1af66
--- /dev/null
+++ b/world/monuments/lighthouse/lighthouse_color.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/lighthouse_color.png-7cc6dff7bffc0de9a0cf209cd8ec5894.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://world/monuments/lighthouse/lighthouse_color.png"
+dest_files=[ "res://.import/lighthouse_color.png-7cc6dff7bffc0de9a0cf209cd8ec5894.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=true
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/world/monuments/lighthouse/lighthouse_color_png-lighthouse_alpha_png.png b/world/monuments/lighthouse/lighthouse_color_png-lighthouse_alpha_png.png
new file mode 100644
index 0000000..329c335
--- /dev/null
+++ b/world/monuments/lighthouse/lighthouse_color_png-lighthouse_alpha_png.png
Binary files differ
diff --git a/world/monuments/lighthouse/lighthouse_color_png-lighthouse_alpha_png.png.import b/world/monuments/lighthouse/lighthouse_color_png-lighthouse_alpha_png.png.import
new file mode 100644
index 0000000..2bb17c4
--- /dev/null
+++ b/world/monuments/lighthouse/lighthouse_color_png-lighthouse_alpha_png.png.import
@@ -0,0 +1,37 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path.s3tc="res://.import/lighthouse_color_png-lighthouse_alpha_png.png-a979403086310babf23d79bee5de48f0.s3tc.stex"
+path.etc2="res://.import/lighthouse_color_png-lighthouse_alpha_png.png-a979403086310babf23d79bee5de48f0.etc2.stex"
+metadata={
+"imported_formats": [ "s3tc", "etc2" ],
+"vram_texture": true
+}
+
+[deps]
+
+source_file="res://world/monuments/lighthouse/lighthouse_color_png-lighthouse_alpha_png.png"
+dest_files=[ "res://.import/lighthouse_color_png-lighthouse_alpha_png.png-a979403086310babf23d79bee5de48f0.s3tc.stex", "res://.import/lighthouse_color_png-lighthouse_alpha_png.png-a979403086310babf23d79bee5de48f0.etc2.stex" ]
+
+[params]
+
+compress/mode=2
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=true
+flags/filter=true
+flags/mipmaps=true
+flags/anisotropic=false
+flags/srgb=1
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=false
+svg/scale=1.0
diff --git a/world/monuments/lighthouse/lighthouse_disp.png b/world/monuments/lighthouse/lighthouse_disp.png
new file mode 100644
index 0000000..96071db
--- /dev/null
+++ b/world/monuments/lighthouse/lighthouse_disp.png
Binary files differ
diff --git a/world/monuments/lighthouse/lighthouse_disp.png.import b/world/monuments/lighthouse/lighthouse_disp.png.import
new file mode 100644
index 0000000..82b2a8d
--- /dev/null
+++ b/world/monuments/lighthouse/lighthouse_disp.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/lighthouse_disp.png-5d8f126cba54b9aad429c03c72f8c283.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://world/monuments/lighthouse/lighthouse_disp.png"
+dest_files=[ "res://.import/lighthouse_disp.png-5d8f126cba54b9aad429c03c72f8c283.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=true
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/world/monuments/lighthouse/lighthouse_normal.png b/world/monuments/lighthouse/lighthouse_normal.png
new file mode 100644
index 0000000..c861d72
--- /dev/null
+++ b/world/monuments/lighthouse/lighthouse_normal.png
Binary files differ
diff --git a/world/monuments/lighthouse/lighthouse_normal.png.import b/world/monuments/lighthouse/lighthouse_normal.png.import
new file mode 100644
index 0000000..4c707ab
--- /dev/null
+++ b/world/monuments/lighthouse/lighthouse_normal.png.import
@@ -0,0 +1,37 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path.s3tc="res://.import/lighthouse_normal.png-dcfc77c9d86223c115a12d566dbecc9a.s3tc.stex"
+path.etc2="res://.import/lighthouse_normal.png-dcfc77c9d86223c115a12d566dbecc9a.etc2.stex"
+metadata={
+"imported_formats": [ "s3tc", "etc2" ],
+"vram_texture": true
+}
+
+[deps]
+
+source_file="res://world/monuments/lighthouse/lighthouse_normal.png"
+dest_files=[ "res://.import/lighthouse_normal.png-dcfc77c9d86223c115a12d566dbecc9a.s3tc.stex", "res://.import/lighthouse_normal.png-dcfc77c9d86223c115a12d566dbecc9a.etc2.stex" ]
+
+[params]
+
+compress/mode=2
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=1
+flags/repeat=true
+flags/filter=true
+flags/mipmaps=true
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=false
+svg/scale=1.0
diff --git a/world/monuments/lighthouse/lighthouse_roughness.png b/world/monuments/lighthouse/lighthouse_roughness.png
new file mode 100644
index 0000000..f1cb110
--- /dev/null
+++ b/world/monuments/lighthouse/lighthouse_roughness.png
Binary files differ
diff --git a/world/monuments/lighthouse/lighthouse_roughness.png.import b/world/monuments/lighthouse/lighthouse_roughness.png.import
new file mode 100644
index 0000000..5be64c9
--- /dev/null
+++ b/world/monuments/lighthouse/lighthouse_roughness.png.import
@@ -0,0 +1,37 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path.s3tc="res://.import/lighthouse_roughness.png-80a5c2ae5bb756fd1ff8b9b8b5bd4766.s3tc.stex"
+path.etc2="res://.import/lighthouse_roughness.png-80a5c2ae5bb756fd1ff8b9b8b5bd4766.etc2.stex"
+metadata={
+"imported_formats": [ "s3tc", "etc2" ],
+"vram_texture": true
+}
+
+[deps]
+
+source_file="res://world/monuments/lighthouse/lighthouse_roughness.png"
+dest_files=[ "res://.import/lighthouse_roughness.png-80a5c2ae5bb756fd1ff8b9b8b5bd4766.s3tc.stex", "res://.import/lighthouse_roughness.png-80a5c2ae5bb756fd1ff8b9b8b5bd4766.etc2.stex" ]
+
+[params]
+
+compress/mode=2
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=true
+flags/filter=true
+flags/mipmaps=true
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=false
+svg/scale=1.0
diff --git a/world/obstacles/Rock_coll.tres b/world/obstacles/Rock_coll.tres
new file mode 100644
index 0000000..b06d080
--- /dev/null
+++ b/world/obstacles/Rock_coll.tres
@@ -0,0 +1,4 @@
+[gd_resource type="ConvexPolygonShape" format=2]
+
+[resource]
+points = PoolVector3Array( 2.5, -5, 2.5, 2.5, -5, -2.5, -2.5, -5, -2.5, -2.5, -5, 2.5, 0, 5, 2.5, 0, 5, -2.5 )
diff --git a/world/obstacles/Rock_lowres_mesh.tres b/world/obstacles/Rock_lowres_mesh.tres
new file mode 100644
index 0000000..910d7f6
--- /dev/null
+++ b/world/obstacles/Rock_lowres_mesh.tres
@@ -0,0 +1,4 @@
+[gd_resource type="CubeMesh" format=2]
+
+[resource]
+size = Vector3( 5, 10, 5 )
diff --git a/world/obstacles/Rock_mat.tres b/world/obstacles/Rock_mat.tres
new file mode 100644
index 0000000..8547487
--- /dev/null
+++ b/world/obstacles/Rock_mat.tres
@@ -0,0 +1,21 @@
+[gd_resource type="SpatialMaterial" load_steps=4 format=2]
+
+[sub_resource type="OpenSimplexNoise" id=3]
+octaves = 4
+period = 32.0
+
+[sub_resource type="NoiseTexture" id=4]
+noise = SubResource( 3 )
+
+[sub_resource type="NoiseTexture" id=5]
+seamless = true
+as_normalmap = true
+bump_strength = 32.0
+noise = SubResource( 3 )
+
+[resource]
+albedo_color = Color( 0.231373, 0.231373, 0.231373, 1 )
+albedo_texture = SubResource( 4 )
+normal_enabled = true
+normal_scale = 1.0
+normal_texture = SubResource( 5 )
diff --git a/world/obstacles/Rock_mesh.tres b/world/obstacles/Rock_mesh.tres
new file mode 100644
index 0000000..bced5b6
--- /dev/null
+++ b/world/obstacles/Rock_mesh.tres
@@ -0,0 +1,4 @@
+[gd_resource type="PrismMesh" format=2]
+
+[resource]
+size = Vector3( 5, 10, 5 )