UV Mapping for Destructable Walls

This commit is contained in:
Relicjamin
2026-01-03 13:06:22 -05:00
committed by Collin Campbell
parent 933bd98a4f
commit 5a1c02aa15
70 changed files with 1762 additions and 1305 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 941 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 427 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

View File

@@ -1,451 +1,451 @@
@icon("res://addons/func_godot/icons/icon_godot_ranger.svg") @icon("res://addons/func_godot/icons/icon_godot_ranger.svg")
class_name FuncGodotEntityAssembler extends RefCounted class_name FuncGodotEntityAssembler extends RefCounted
## Entity assembly class that is instantiated by a [FuncGodotMap] node. ## Entity assembly class that is instantiated by a [FuncGodotMap] node.
const _SIGNATURE: String = "[ENT]" const _SIGNATURE: String = "[ENT]"
# Namespacing # Namespacing
const _GroupData := FuncGodotData.GroupData const _GroupData := FuncGodotData.GroupData
const _EntityData := FuncGodotData.EntityData const _EntityData := FuncGodotData.EntityData
# Class members # Class members
## [FuncGodotMapSettings] provided by the [FuncGodotMap] during the build process. ## [FuncGodotMapSettings] provided by the [FuncGodotMap] during the build process.
var map_settings: FuncGodotMapSettings = null var map_settings: FuncGodotMapSettings = null
## [enum FuncGodotMap.BuildFlags] that may affect the build process provided by the [FuncGodotMap]. ## [enum FuncGodotMap.BuildFlags] that may affect the build process provided by the [FuncGodotMap].
var build_flags: int = 0 var build_flags: int = 0
# Signals # Signals
## Emitted when a step in the entity assembly process is completed. ## Emitted when a step in the entity assembly process is completed.
## It is connected to [method FuncGodotUtil.print_profile_info] method if [member FuncGodotMap.build_flags] SHOW_PROFILE_INFO flag is set. ## It is connected to [method FuncGodotUtil.print_profile_info] method if [member FuncGodotMap.build_flags] SHOW_PROFILE_INFO flag is set.
signal declare_step(step: String) signal declare_step(step: String)
func _init(settings: FuncGodotMapSettings) -> void: func _init(settings: FuncGodotMapSettings) -> void:
map_settings = settings map_settings = settings
## Attempts to retrieve a [Script] via class name, to allow for [GDScript] class instantiation. ## Attempts to retrieve a [Script] via class name, to allow for [GDScript] class instantiation.
static func get_script_by_class_name(name_of_class: String) -> Script: static func get_script_by_class_name(name_of_class: String) -> Script:
if ResourceLoader.exists(name_of_class, "Script"): if ResourceLoader.exists(name_of_class, "Script"):
return load(name_of_class) as Script return load(name_of_class) as Script
for global_class in ProjectSettings.get_global_class_list(): for global_class in ProjectSettings.get_global_class_list():
var found_name_of_class : String = global_class["class"] var found_name_of_class : String = global_class["class"]
var found_path : String = global_class["path"] var found_path : String = global_class["path"]
if found_name_of_class == name_of_class: if found_name_of_class == name_of_class:
return load(found_path) as Script return load(found_path) as Script
return null return null
## Generates a [Node3D] for a group's [SceneTree] representation and links the new [Node3D] to that group. ## Generates a [Node3D] for a group's [SceneTree] representation and links the new [Node3D] to that group.
func generate_group_node(group_data: _GroupData) -> Node3D: func generate_group_node(group_data: _GroupData) -> Node3D:
var group_node := Node3D.new() var group_node := Node3D.new()
group_node.name = group_data.name group_node.name = group_data.name
group_data.node = group_node group_data.node = group_node
return group_node return group_node
## Generates and assembles a new [Node] based upon processed [FuncGodotData.EntityData]. Depending upon provided data, ## Generates and assembles a new [Node] based upon processed [FuncGodotData.EntityData]. Depending upon provided data,
## additional [MeshInstance3D], [CollisionShape3D], and [OccluderInstance3D] nodes may also be generated. ## additional [MeshInstance3D], [CollisionShape3D], and [OccluderInstance3D] nodes may also be generated.
func generate_solid_entity_node(node: Node, node_name: String, data: _EntityData, definition: FuncGodotFGDSolidClass) -> Node: func generate_solid_entity_node(node: Node, node_name: String, data: _EntityData, definition: FuncGodotFGDSolidClass) -> Node:
if definition.spawn_type == FuncGodotFGDSolidClass.SpawnType.MERGE_WORLDSPAWN: if definition.spawn_type == FuncGodotFGDSolidClass.SpawnType.MERGE_WORLDSPAWN:
return null return null
if definition.node_class != "": if definition.node_class != "":
if ClassDB.class_exists(definition.node_class): if ClassDB.class_exists(definition.node_class):
node = ClassDB.instantiate(definition.node_class) node = ClassDB.instantiate(definition.node_class)
else: else:
var script: Script = get_script_by_class_name(definition.node_class) var script: Script = get_script_by_class_name(definition.node_class)
if script is GDScript: if script is GDScript:
node = (script as GDScript).new() node = (script as GDScript).new()
else: else:
node = Node3D.new() node = Node3D.new()
node.name = node_name node.name = node_name
node_name = node_name.trim_suffix(definition.classname).trim_suffix("_") node_name = node_name.trim_suffix(definition.classname).trim_suffix("_")
var properties: Dictionary = data.properties var properties: Dictionary = data.properties
# Mesh Instance generation # Mesh Instance generation
if data.mesh: if data.mesh:
var mesh_instance := MeshInstance3D.new() var mesh_instance := MeshInstance3D.new()
mesh_instance.name = node_name + "_mesh_instance" mesh_instance.name = node_name + "_mesh_instance"
mesh_instance.mesh = data.mesh mesh_instance.mesh = data.mesh
mesh_instance.gi_mode = GeometryInstance3D.GI_MODE_DISABLED mesh_instance.gi_mode = GeometryInstance3D.GI_MODE_DISABLED
if definition.global_illumination_mode: if definition.global_illumination_mode:
mesh_instance.gi_mode = definition.global_illumination_mode mesh_instance.gi_mode = definition.global_illumination_mode
mesh_instance.cast_shadow = definition.shadow_casting_setting mesh_instance.cast_shadow = definition.shadow_casting_setting
mesh_instance.layers = definition.render_layers mesh_instance.layers = definition.render_layers
node.add_child(mesh_instance) node.add_child(mesh_instance)
data.mesh_instance = mesh_instance data.mesh_instance = mesh_instance
# Occluder generation # Occluder generation
if definition.build_occlusion and data.mesh: if definition.build_occlusion and data.mesh:
var verts: PackedVector3Array = [] var verts: PackedVector3Array = []
var indices: PackedInt32Array = [] var indices: PackedInt32Array = []
var index: int = 0 var index: int = 0
for surf_idx in range(data.mesh.get_surface_count()): for surf_idx in range(data.mesh.get_surface_count()):
var vert_count: int = verts.size() var vert_count: int = verts.size()
var surf_array: Array = data.mesh.surface_get_arrays(surf_idx) var surf_array: Array = data.mesh.surface_get_arrays(surf_idx)
verts.append_array(surf_array[Mesh.ARRAY_VERTEX]) verts.append_array(surf_array[Mesh.ARRAY_VERTEX])
indices.resize(indices.size() + surf_array[Mesh.ARRAY_INDEX].size()) indices.resize(indices.size() + surf_array[Mesh.ARRAY_INDEX].size())
for new_index in surf_array[Mesh.ARRAY_INDEX]: for new_index in surf_array[Mesh.ARRAY_INDEX]:
indices[index] = (new_index + vert_count) indices[index] = (new_index + vert_count)
index += 1 index += 1
var occluder := ArrayOccluder3D.new() var occluder := ArrayOccluder3D.new()
occluder.set_arrays(verts, indices) occluder.set_arrays(verts, indices)
var occluder_instance := OccluderInstance3D.new() var occluder_instance := OccluderInstance3D.new()
occluder_instance.name = node_name + "_occluder_instance" occluder_instance.name = node_name + "_occluder_instance"
occluder_instance.occluder = occluder occluder_instance.occluder = occluder
node.add_child(occluder_instance) node.add_child(occluder_instance)
data.occluder_instance = occluder_instance data.occluder_instance = occluder_instance
if not (build_flags & FuncGodotMap.BuildFlags.DISABLE_SMOOTHING) and data.is_smooth_shaded(map_settings.entity_smoothing_property): if not (build_flags & FuncGodotMap.BuildFlags.DISABLE_SMOOTHING) and data.is_smooth_shaded(map_settings.entity_smoothing_property):
mesh_instance.mesh = FuncGodotUtil.smooth_mesh_by_angle(data.mesh, data.get_smoothing_angle(map_settings.entity_smoothing_angle_property)) mesh_instance.mesh = FuncGodotUtil.smooth_mesh_by_angle(data.mesh, data.get_smoothing_angle(map_settings.entity_smoothing_angle_property))
# Collision generation # Collision generation
if data.shapes.size() and node is CollisionObject3D: if data.shapes.size() and node is CollisionObject3D:
node.collision_layer = definition.collision_layer node.collision_layer = definition.collision_layer
node.collision_mask = definition.collision_mask node.collision_mask = definition.collision_mask
node.collision_priority = definition.collision_priority node.collision_priority = definition.collision_priority
var shape_to_face_array : Array[PackedInt32Array] = [] var shape_to_face_array : Array[PackedInt32Array] = []
if data.mesh_metadata.has('shape_to_face_array'): if data.mesh_metadata.has('shape_to_face_array'):
shape_to_face_array = data.mesh_metadata['shape_to_face_array'] shape_to_face_array = data.mesh_metadata['shape_to_face_array']
data.mesh_metadata.erase('shape_to_face_array') data.mesh_metadata.erase('shape_to_face_array')
# Generate CollisionShape3D nodes and apply shapes # Generate CollisionShape3D nodes and apply shapes
var face_index_metadata : Dictionary[String, PackedInt32Array] = {} var face_index_metadata : Dictionary[String, PackedInt32Array] = {}
for i in data.shapes.size(): for i in data.shapes.size():
var shape := data.shapes[i] var shape := data.shapes[i]
var collision_shape := CollisionShape3D.new() var collision_shape := CollisionShape3D.new()
if definition.collision_shape_type == FuncGodotFGDSolidClass.CollisionShapeType.CONCAVE: if definition.collision_shape_type == FuncGodotFGDSolidClass.CollisionShapeType.CONCAVE:
collision_shape.name = node_name + "_collision_shape" collision_shape.name = node_name + "_collision_shape"
else: else:
collision_shape.name = node_name + "_brush_%s_collision_shape" % i collision_shape.name = node_name + "_brush_%s_collision_shape" % i
collision_shape.shape = shape collision_shape.shape = shape
collision_shape.shape.margin = definition.collision_shape_margin collision_shape.shape.margin = definition.collision_shape_margin
collision_shape.owner = node.owner collision_shape.owner = node.owner
node.add_child(collision_shape) node.add_child(collision_shape)
data.collision_shapes.append(collision_shape) data.collision_shapes.append(collision_shape)
if shape_to_face_array.size() > i: if shape_to_face_array.size() > i:
face_index_metadata[collision_shape.name] = shape_to_face_array[i] face_index_metadata[collision_shape.name] = shape_to_face_array[i]
if definition.add_collision_shape_to_face_indices_metadata: if definition.add_collision_shape_to_face_indices_metadata:
data.mesh_metadata['collision_shape_to_face_indices_map'] = face_index_metadata data.mesh_metadata['collision_shape_to_face_indices_map'] = face_index_metadata
if "position" in node: if "position" in node:
if node.position is Vector3: if node.position is Vector3:
node.position = FuncGodotUtil.id_to_opengl(data.origin) * map_settings.scale_factor node.position = FuncGodotUtil.id_to_opengl(data.origin) * map_settings.scale_factor
if not data.mesh_metadata.is_empty(): if not data.mesh_metadata.is_empty():
node.set_meta("func_godot_mesh_data", data.mesh_metadata) node.set_meta("func_godot_mesh_data", data.mesh_metadata)
return node return node
## Generates and assembles a new [Node] or [PackedScene] based upon processed [FuncGodotData.EntityData]. ## Generates and assembles a new [Node] or [PackedScene] based upon processed [FuncGodotData.EntityData].
func generate_point_entity_node(node: Node, node_name: String, properties: Dictionary, definition: FuncGodotFGDPointClass) -> Node: func generate_point_entity_node(node: Node, node_name: String, properties: Dictionary, definition: FuncGodotFGDPointClass) -> Node:
var classname: String = properties["classname"] var classname: String = properties["classname"]
if definition.scene_file: if definition.scene_file:
var flag: PackedScene.GenEditState = PackedScene.GEN_EDIT_STATE_DISABLED var flag: PackedScene.GenEditState = PackedScene.GEN_EDIT_STATE_DISABLED
if Engine.is_editor_hint(): if Engine.is_editor_hint():
flag = PackedScene.GEN_EDIT_STATE_INSTANCE flag = PackedScene.GEN_EDIT_STATE_INSTANCE
node = definition.scene_file.instantiate(flag) node = definition.scene_file.instantiate(flag)
elif definition.node_class != "": elif definition.node_class != "":
if ClassDB.class_exists(definition.node_class): if ClassDB.class_exists(definition.node_class):
node = ClassDB.instantiate(definition.node_class) node = ClassDB.instantiate(definition.node_class)
else: else:
var script: Script = get_script_by_class_name(definition.node_class) var script: Script = get_script_by_class_name(definition.node_class)
if script is GDScript: if script is GDScript:
node = (script as GDScript).new() node = (script as GDScript).new()
else: else:
node = Node3D.new() node = Node3D.new()
node.name = node_name node.name = node_name
if "rotation_degrees" in node and definition.apply_rotation_on_map_build: if "rotation_degrees" in node and definition.apply_rotation_on_map_build:
var angles := Vector3.ZERO var angles := Vector3.ZERO
if "angles" in properties or "mangle" in properties: if "angles" in properties or "mangle" in properties:
var key := "angles" if "angles" in properties else "mangle" var key := "angles" if "angles" in properties else "mangle"
var angles_raw = properties[key] var angles_raw = properties[key]
if not angles_raw is Vector3: if not angles_raw is Vector3:
angles_raw = angles_raw.split_floats(' ') angles_raw = angles_raw.split_floats(' ')
if angles_raw.size() > 2: if angles_raw.size() > 2:
angles = Vector3(-angles_raw[0], angles_raw[1], -angles_raw[2]) angles = Vector3(-angles_raw[0], angles_raw[1], -angles_raw[2])
if key == "mangle": if key == "mangle":
if definition.classname.begins_with("light"): if definition.classname.begins_with("light"):
angles = Vector3(angles_raw[1], angles_raw[0], -angles_raw[2]) angles = Vector3(angles_raw[1], angles_raw[0], -angles_raw[2])
elif definition.classname == "info_intermission": elif definition.classname == "info_intermission":
angles = Vector3(angles_raw[0], angles_raw[1], -angles_raw[2]) angles = Vector3(angles_raw[0], angles_raw[1], -angles_raw[2])
else: else:
push_error("Invalid vector format for \"" + key + "\" in entity \"" + classname + "\"") push_error("Invalid vector format for \"" + key + "\" in entity \"" + classname + "\"")
elif "angle" in properties: elif "angle" in properties:
var angle = properties["angle"] var angle = properties["angle"]
if not angle is float: if not angle is float:
angle = float(angle) angle = float(angle)
angles.y += angle angles.y += angle
angles.y += 180 angles.y += 180
node.rotation_degrees = angles node.rotation_degrees = angles
if "scale" in node and definition.apply_scale_on_map_build: if "scale" in node and definition.apply_scale_on_map_build:
if "scale" in properties: if "scale" in properties:
var scale_prop: Variant = properties["scale"] var scale_prop: Variant = properties["scale"]
if typeof(scale_prop) == TYPE_STRING: if typeof(scale_prop) == TYPE_STRING:
var scale_arr: PackedStringArray = (scale_prop as String).split(" ") var scale_arr: PackedStringArray = (scale_prop as String).split(" ")
match scale_arr.size(): match scale_arr.size():
1: scale_prop = scale_arr[0].to_float() 1: scale_prop = scale_arr[0].to_float()
3: scale_prop = Vector3(scale_arr[1].to_float(), scale_arr[2].to_float(), scale_arr[0].to_float()) 3: scale_prop = Vector3(scale_arr[1].to_float(), scale_arr[2].to_float(), scale_arr[0].to_float())
2: scale_prop = Vector2(scale_arr[0].to_float(), scale_arr[0].to_float()) 2: scale_prop = Vector2(scale_arr[0].to_float(), scale_arr[0].to_float())
if typeof(scale_prop) == TYPE_FLOAT or typeof(scale_prop) == TYPE_INT: if typeof(scale_prop) == TYPE_FLOAT or typeof(scale_prop) == TYPE_INT:
node.scale *= scale_prop as float node.scale *= scale_prop as float
elif node.scale is Vector3: elif node.scale is Vector3:
if typeof(scale_prop) == TYPE_VECTOR3 or typeof(scale_prop) == TYPE_VECTOR3I: if typeof(scale_prop) == TYPE_VECTOR3 or typeof(scale_prop) == TYPE_VECTOR3I:
node.scale *= scale_prop as Vector3 node.scale *= scale_prop as Vector3
elif node.scale is Vector2: elif node.scale is Vector2:
if typeof(scale_prop) == TYPE_VECTOR2 or typeof(scale_prop) == TYPE_VECTOR2I: if typeof(scale_prop) == TYPE_VECTOR2 or typeof(scale_prop) == TYPE_VECTOR2I:
node.scale *= scale_prop as Vector2 node.scale *= scale_prop as Vector2
if "origin" in properties: if "origin" in properties:
var origin_vec: Vector3 = Vector3.ZERO var origin_vec: Vector3 = Vector3.ZERO
var origin_comps: PackedFloat64Array = properties['origin'].split_floats(' ') var origin_comps: PackedFloat64Array = properties['origin'].split_floats(' ')
if origin_comps.size() > 2: if origin_comps.size() > 2:
origin_vec = Vector3(origin_comps[1], origin_comps[2], origin_comps[0]) origin_vec = Vector3(origin_comps[1], origin_comps[2], origin_comps[0])
else: else:
push_error("Invalid vector format for \"origin\" in " + node_name) push_error("Invalid vector format for \"origin\" in " + node_name)
if "position" in node: if "position" in node:
if node.position is Vector3: if node.position is Vector3:
node.position = origin_vec * map_settings.scale_factor node.position = origin_vec * map_settings.scale_factor
elif node.position is Vector2: elif node.position is Vector2:
node.position = Vector2(origin_vec.z, -origin_vec.y) node.position = Vector2(origin_vec.z, -origin_vec.y)
return node return node
## Converts the [String] values of the entity data's [code]properties[/code] [Dictionary] to various [Variant] formats ## Converts the [String] values of the entity data's [code]properties[/code] [Dictionary] to various [Variant] formats
## based upon the [FuncGodotFGDEntity]'s class properties, then attempts to send those properties to a [code]func_godot_properties[/code] [Dictionary] ## based upon the [FuncGodotFGDEntity]'s class properties, then attempts to send those properties to a [code]func_godot_properties[/code] [Dictionary]
## and an [code]_func_godot_apply_properties(properties: Dictionary)[/code] method on the node. A deferred call to [code]_func_godot_build_complete()[/code] is also made. ## and an [code]_func_godot_apply_properties(properties: Dictionary)[/code] method on the node. A deferred call to [code]_func_godot_build_complete()[/code] is also made.
func apply_entity_properties(node: Node, data: _EntityData) -> void: func apply_entity_properties(node: Node, data: _EntityData) -> void:
var properties: Dictionary = data.properties var properties: Dictionary = data.properties
if data.definition: if data.definition:
var def := data.definition var def := data.definition
for property in properties: for property in properties:
var prop_string = properties[property] var prop_string = properties[property]
if property in def.class_properties: if property in def.class_properties:
var prop_default: Variant = def.class_properties[property] var prop_default: Variant = def.class_properties[property]
match typeof(prop_default): match typeof(prop_default):
TYPE_INT: TYPE_INT:
properties[property] = prop_string.to_int() properties[property] = prop_string.to_int()
TYPE_FLOAT: TYPE_FLOAT:
properties[property] = prop_string.to_float() properties[property] = prop_string.to_float()
TYPE_BOOL: TYPE_BOOL:
properties[property] = bool(prop_string.to_int()) properties[property] = bool(prop_string.to_int())
TYPE_VECTOR3: TYPE_VECTOR3:
var prop_comps: PackedFloat64Array = prop_string.split_floats(" ") var prop_comps: PackedFloat64Array = prop_string.split_floats(" ")
if prop_comps.size() > 2: if prop_comps.size() > 2:
properties[property] = Vector3(prop_comps[0], prop_comps[1], prop_comps[2]) properties[property] = Vector3(prop_comps[0], prop_comps[1], prop_comps[2])
else: else:
push_error("Invalid Vector3 format for \'" + property + "\' in entity \'" + def.classname + "\': " + prop_string) push_error("Invalid Vector3 format for \'" + property + "\' in entity \'" + def.classname + "\': " + prop_string)
properties[property] = prop_default properties[property] = prop_default
TYPE_VECTOR3I: TYPE_VECTOR3I:
var prop_vec: Vector3i = prop_default var prop_vec: Vector3i = prop_default
var prop_comps: PackedStringArray = prop_string.split(" ") var prop_comps: PackedStringArray = prop_string.split(" ")
if prop_comps.size() > 2: if prop_comps.size() > 2:
for i in 3: for i in 3:
prop_vec[i] = prop_comps[i].to_int() prop_vec[i] = prop_comps[i].to_int()
else: else:
push_error("Invalid Vector3i format for \'" + property + "\' in entity \'" + def.classname + "\': " + prop_string) push_error("Invalid Vector3i format for \'" + property + "\' in entity \'" + def.classname + "\': " + prop_string)
properties[property] = prop_vec properties[property] = prop_vec
TYPE_COLOR: TYPE_COLOR:
var prop_color: Color = prop_default var prop_color: Color = prop_default
var prop_comps: PackedStringArray = prop_string.split(" ") var prop_comps: PackedStringArray = prop_string.split(" ")
if prop_comps.size() > 2: if prop_comps.size() > 2:
prop_color.r8 = prop_comps[0].to_int() prop_color.r8 = prop_comps[0].to_int()
prop_color.g8 = prop_comps[1].to_int() prop_color.g8 = prop_comps[1].to_int()
prop_color.b8 = prop_comps[2].to_int() prop_color.b8 = prop_comps[2].to_int()
prop_color.a = 1.0 prop_color.a = 1.0
else: else:
push_error("Invalid Color format for \'" + property + "\' in entity \'" + def.classname + "\': " + prop_string) push_error("Invalid Color format for \'" + property + "\' in entity \'" + def.classname + "\': " + prop_string)
properties[property] = prop_color properties[property] = prop_color
TYPE_DICTIONARY: TYPE_DICTIONARY:
var prop_desc = def.class_property_descriptions[property] var prop_desc = def.class_property_descriptions[property]
if prop_desc is Array and prop_desc.size() > 1 and prop_desc[1] is int: if prop_desc is Array and prop_desc.size() > 1 and prop_desc[1] is int:
properties[property] = prop_string.to_int() properties[property] = prop_string.to_int()
TYPE_ARRAY: TYPE_ARRAY:
properties[property] = prop_string.to_int() properties[property] = prop_string.to_int()
TYPE_VECTOR2: TYPE_VECTOR2:
var prop_comps: PackedFloat64Array = prop_string.split_floats(" ") var prop_comps: PackedFloat64Array = prop_string.split_floats(" ")
if prop_comps.size() > 1: if prop_comps.size() > 1:
properties[property] = Vector2(prop_comps[0], prop_comps[1]) properties[property] = Vector2(prop_comps[0], prop_comps[1])
else: else:
push_error("Invalid Vector2 format for \'" + property + "\' in entity \'" + def.classname + "\': " + prop_string) push_error("Invalid Vector2 format for \'" + property + "\' in entity \'" + def.classname + "\': " + prop_string)
properties[property] = prop_default properties[property] = prop_default
TYPE_VECTOR2I: TYPE_VECTOR2I:
var prop_vec: Vector2i = prop_default var prop_vec: Vector2i = prop_default
var prop_comps: PackedStringArray = prop_string.split(" ") var prop_comps: PackedStringArray = prop_string.split(" ")
if prop_comps.size() > 1: if prop_comps.size() > 1:
for i in 2: for i in 2:
prop_vec[i] = prop_comps[i].to_int() prop_vec[i] = prop_comps[i].to_int()
else: else:
push_error("Invalid Vector2i format for \'" + property + "\' in entity \'" + def.classname + "\': " + prop_string) push_error("Invalid Vector2i format for \'" + property + "\' in entity \'" + def.classname + "\': " + prop_string)
properties[property] = prop_vec properties[property] = prop_vec
TYPE_VECTOR4: TYPE_VECTOR4:
var prop_comps: PackedFloat64Array = prop_string.split_floats(" ") var prop_comps: PackedFloat64Array = prop_string.split_floats(" ")
if prop_comps.size() > 3: if prop_comps.size() > 3:
properties[property] = Vector4(prop_comps[0], prop_comps[1], prop_comps[2], prop_comps[3]) properties[property] = Vector4(prop_comps[0], prop_comps[1], prop_comps[2], prop_comps[3])
else: else:
push_error("Invalid Vector4 format for \'" + property + "\' in entity \'" + def.classname + "\': " + prop_string) push_error("Invalid Vector4 format for \'" + property + "\' in entity \'" + def.classname + "\': " + prop_string)
properties[property] = prop_default properties[property] = prop_default
TYPE_VECTOR4I: TYPE_VECTOR4I:
var prop_vec: Vector4i = prop_default var prop_vec: Vector4i = prop_default
var prop_comps: PackedStringArray = prop_string.split(" ") var prop_comps: PackedStringArray = prop_string.split(" ")
if prop_comps.size() > 3: if prop_comps.size() > 3:
for i in 4: for i in 4:
prop_vec[i] = prop_comps[i].to_int() prop_vec[i] = prop_comps[i].to_int()
else: else:
push_error("Invalid Vector4i format for \'" + property + "\' in entity \'" + def.classname + "\': " + prop_string) push_error("Invalid Vector4i format for \'" + property + "\' in entity \'" + def.classname + "\': " + prop_string)
properties[property] = prop_vec properties[property] = prop_vec
TYPE_STRING_NAME: TYPE_STRING_NAME:
properties[property] = StringName(prop_string) properties[property] = StringName(prop_string)
TYPE_NODE_PATH: TYPE_NODE_PATH:
properties[property] = prop_string properties[property] = prop_string
TYPE_OBJECT: TYPE_OBJECT:
properties[property] = prop_string properties[property] = prop_string
# Assign properties not defined with defaults from the entity definition # Assign properties not defined with defaults from the entity definition
for property in def.class_properties: for property in def.class_properties:
if not property in properties: if not property in properties:
var prop_default: Variant = def.class_properties[property] var prop_default: Variant = def.class_properties[property]
# Flags # Flags
if prop_default is Array: if prop_default is Array:
var prop_flags_sum := 0 var prop_flags_sum := 0
for prop_flag in prop_default: for prop_flag in prop_default:
if prop_flag is Array and prop_flag.size() > 2: if prop_flag is Array and prop_flag.size() > 2:
if prop_flag[2] and prop_flag[1] is int: if prop_flag[2] and prop_flag[1] is int:
prop_flags_sum += prop_flag[1] prop_flags_sum += prop_flag[1]
properties[property] = prop_flags_sum properties[property] = prop_flags_sum
# Choices # Choices
elif prop_default is Dictionary: elif prop_default is Dictionary:
var prop_desc = def.class_property_descriptions.get(property, "") var prop_desc = def.class_property_descriptions.get(property, "")
if prop_desc is Array and prop_desc.size() > 1 and (prop_desc[1] is int or prop_desc[1] is String): if prop_desc is Array and prop_desc.size() > 1 and (prop_desc[1] is int or prop_desc[1] is String):
properties[property] = prop_desc[1] properties[property] = prop_desc[1]
elif prop_default.size(): elif prop_default.size():
properties[property] = prop_default[prop_default.keys().front()] properties[property] = prop_default[prop_default.keys().front()]
else: else:
properties[property] = 0 properties[property] = 0
# Materials, Shaders, and Sounds # Materials, Shaders, and Sounds
elif prop_default is Resource: elif prop_default is Resource:
properties[property] = prop_default.resource_path properties[property] = prop_default.resource_path
# Target Destination and Target Source # Target Destination and Target Source
elif prop_default is NodePath or prop_default is Object or prop_default == null: elif prop_default is NodePath or prop_default is Object or prop_default == null:
properties[property] = "" properties[property] = ""
# Everything else # Everything else
else: else:
properties[property] = prop_default properties[property] = prop_default
if def.auto_apply_to_matching_node_properties: if def.auto_apply_to_matching_node_properties:
for property in properties: for property in properties:
if property in node: if property in node:
if typeof(node.get(property)) == typeof(properties[property]): if typeof(node.get(property)) == typeof(properties[property]):
node.set(property, properties[property]) node.set(property, properties[property])
else: else:
push_error("Entity %s property \'%s\' type mismatch with matching generated node property." % [node.name, property]) push_error("Entity %s property \'%s\' type mismatch with matching generated node property." % [node.name, property])
if "func_godot_properties" in node: if "func_godot_properties" in node:
node.func_godot_properties = properties node.func_godot_properties = properties
if node.has_method("_func_godot_apply_properties"): if node.has_method("_func_godot_apply_properties"):
node.call("_func_godot_apply_properties", properties) node.call("_func_godot_apply_properties", properties)
if node.has_method("_func_godot_build_complete"): if node.has_method("_func_godot_build_complete"):
node.call_deferred("_func_godot_build_complete") node.call_deferred("_func_godot_build_complete")
## Generate a [Node] from [FuncGodotData.EntityData]. The returned node value can be [code]null[/code], ## Generate a [Node] from [FuncGodotData.EntityData]. The returned node value can be [code]null[/code],
## in the case of [FuncGodotFGDSolidClass] entities with no [FuncGodotData.BrushData] entries. ## in the case of [FuncGodotFGDSolidClass] entities with no [FuncGodotData.BrushData] entries.
func generate_entity_node(entity_data: _EntityData, entity_index: int) -> Node: func generate_entity_node(entity_data: _EntityData, entity_index: int) -> Node:
var node: Node = null var node: Node = null
var node_name: String = "entity_%s" % entity_index var node_name: String = "entity_%s" % entity_index
var properties: Dictionary = entity_data.properties var properties: Dictionary = entity_data.properties
var entity_def: FuncGodotFGDEntityClass = entity_data.definition var entity_def: FuncGodotFGDEntityClass = entity_data.definition
if "classname" in entity_data.properties: if "classname" in entity_data.properties:
var classname: String = properties["classname"] var classname: String = properties["classname"]
node_name += "_" + properties["classname"] node_name += "_" + properties["classname"]
var default_point_def := FuncGodotFGDPointClass.new() var default_point_def := FuncGodotFGDPointClass.new()
var default_solid_def := FuncGodotFGDSolidClass.new() var default_solid_def := FuncGodotFGDSolidClass.new()
default_solid_def.collision_shape_type = FuncGodotFGDSolidClass.CollisionShapeType.NONE default_solid_def.collision_shape_type = FuncGodotFGDSolidClass.CollisionShapeType.NONE
if entity_def: if entity_def:
var name_prop: String var name_prop: String
if entity_def.name_property in properties: if entity_def.name_property in properties:
name_prop = str(properties[entity_def.name_property]) name_prop = str(properties[entity_def.name_property])
elif map_settings.entity_name_property in properties: elif map_settings.entity_name_property in properties:
name_prop = str(properties[map_settings.entity_name_property]) name_prop = str(properties[map_settings.entity_name_property])
if not name_prop.is_empty(): if not name_prop.is_empty():
node_name = "entity_" + name_prop node_name = "entity_" + name_prop
if entity_def is FuncGodotFGDSolidClass: if entity_def is FuncGodotFGDSolidClass:
node = generate_solid_entity_node(node, node_name, entity_data, entity_def) node = generate_solid_entity_node(node, node_name, entity_data, entity_def)
elif entity_def is FuncGodotFGDPointClass: elif entity_def is FuncGodotFGDPointClass:
node = generate_point_entity_node(node, node_name, properties, entity_def) node = generate_point_entity_node(node, node_name, properties, entity_def)
else: else:
push_error("Invalid entity definition for \"" + node_name + "\". Entity definition must be Solid Class or Point Class.") push_error("Invalid entity definition for \"" + node_name + "\". Entity definition must be Solid Class or Point Class.")
node = generate_point_entity_node(node, node_name, properties, default_point_def) node = generate_point_entity_node(node, node_name, properties, default_point_def)
if node and entity_def.script_class: if node and entity_def.script_class:
node.set_script(entity_def.script_class) node.set_script(entity_def.script_class)
else: else:
push_error("No entity definition found for \"" + node_name + "\"") push_error("No entity definition found for \"" + node_name + "\"")
if entity_data.brushes.size(): if entity_data.brushes.size():
node = generate_solid_entity_node(node, node_name, entity_data, default_solid_def) node = generate_solid_entity_node(node, node_name, entity_data, default_solid_def)
else: else:
node = generate_point_entity_node(node, node_name, properties, default_point_def) node = generate_point_entity_node(node, node_name, properties, default_point_def)
return node return node
## Main entity assembly process called by [FuncGodotMap]. Generates and sorts group nodes in the [SceneTree] first, ## Main entity assembly process called by [FuncGodotMap]. Generates and sorts group nodes in the [SceneTree] first,
## then generates and assembles [Node]s based upon the provided [FuncGodotData.EntityData] and adds them to the [SceneTree]. ## then generates and assembles [Node]s based upon the provided [FuncGodotData.EntityData] and adds them to the [SceneTree].
func build(map_node: FuncGodotMap, entities: Array[_EntityData], groups: Array[_GroupData]) -> void: func build(map_node: FuncGodotMap, entities: Array[_EntityData], groups: Array[_GroupData]) -> void:
var scene_root := map_node.get_tree().edited_scene_root if map_node.get_tree() else map_node var scene_root := map_node.get_tree().edited_scene_root if map_node.get_tree() else map_node
build_flags = map_node.build_flags build_flags = map_node.build_flags
if map_settings.use_groups_hierarchy: if map_settings.use_groups_hierarchy:
declare_step.emit("Generating %s groups" % groups.size()) declare_step.emit("Generating %s groups" % groups.size())
# Generate group nodes # Generate group nodes
for group in groups: for group in groups:
group.node = generate_group_node(group) group.node = generate_group_node(group)
# Sort hierarchy and add them to the map # Sort hierarchy and add them to the map
for group in groups: for group in groups:
if group.parent_id < 0: if group.parent_id < 0:
map_node.add_child(group.node) map_node.add_child(group.node)
group.node.owner = scene_root group.node.owner = scene_root
else: else:
for parent in groups: for parent in groups:
if group.parent_id == parent.id: if group.parent_id == parent.id:
parent.node.add_child(group.node) parent.node.add_child(group.node)
group.node.owner = scene_root group.node.owner = scene_root
declare_step.emit("Groups generation and sorting complete") declare_step.emit("Groups generation and sorting complete")
declare_step.emit("Assembling %s entities" % entities.size()) declare_step.emit("Assembling %s entities" % entities.size())
var entity_node: Node = null var entity_node: Node = null
for entity_index in entities.size(): for entity_index in entities.size():
var entity_data : _EntityData = entities[entity_index] var entity_data : _EntityData = entities[entity_index]
entity_node = generate_entity_node(entity_data, entity_index) entity_node = generate_entity_node(entity_data, entity_index)
if entity_node: if entity_node:
if not map_settings.use_groups_hierarchy or not entity_data.group: if not map_settings.use_groups_hierarchy or not entity_data.group:
map_node.add_child(entity_node) map_node.add_child(entity_node)
if entity_index == 0: if entity_index == 0:
map_node.move_child(entity_node, 0) map_node.move_child(entity_node, 0)
elif map_settings.use_groups_hierarchy: elif map_settings.use_groups_hierarchy:
for group in groups: for group in groups:
if entity_data.group.id == group.id: if entity_data.group.id == group.id:
group.node.add_child(entity_node) group.node.add_child(entity_node)
entity_node.owner = scene_root entity_node.owner = scene_root
if entity_data.mesh_instance: if entity_data.mesh_instance:
entity_data.mesh_instance.owner = scene_root entity_data.mesh_instance.owner = scene_root
for shape in entity_data.collision_shapes: for shape in entity_data.collision_shapes:
if shape: if shape:
shape.owner = scene_root shape.owner = scene_root
if entity_data.occluder_instance: if entity_data.occluder_instance:
entity_data.occluder_instance.owner = scene_root entity_data.occluder_instance.owner = scene_root
apply_entity_properties(entity_node, entity_data) apply_entity_properties(entity_node, entity_data)
declare_step.emit("Entity assembly and property application complete") declare_step.emit("Entity assembly and property application complete")

View File

@@ -321,6 +321,7 @@ func generate_entity_surfaces(entity_index: int) -> void:
var current_metadata_index: int = 0 var current_metadata_index: int = 0
var texture_names_metadata: Array[StringName] = [] var texture_names_metadata: Array[StringName] = []
var textures_metadata: PackedInt32Array = [] var textures_metadata: PackedInt32Array = []
var uv_metadata: PackedVector2Array = []
var vertices_metadata: PackedVector3Array = [] var vertices_metadata: PackedVector3Array = []
var normals_metadata: PackedVector3Array = [] var normals_metadata: PackedVector3Array = []
var positions_metadata: PackedVector3Array = [] var positions_metadata: PackedVector3Array = []
@@ -371,7 +372,6 @@ func generate_entity_surfaces(entity_index: int) -> void:
# Begin fresh index offset for this subarray # Begin fresh index offset for this subarray
var index_offset: int = 0 var index_offset: int = 0
for face in faces: for face in faces:
# FACE SCOPE BEGIN # FACE SCOPE BEGIN
@@ -423,6 +423,13 @@ func generate_entity_surfaces(entity_index: int) -> void:
face_index_metadata_map[face] = PackedInt32Array(range(current_metadata_index, current_metadata_index + num_tris)) face_index_metadata_map[face] = PackedInt32Array(range(current_metadata_index, current_metadata_index + num_tris))
current_metadata_index += num_tris current_metadata_index += num_tris
# ADD UV METADATA
for i in face.indices:
var v = face.vertices[i]
var tx_sz: Vector2 = texture_sizes.get(face.texture, Vector2.ONE * map_settings.inverse_scale_factor)
uv_metadata.append(FuncGodotUtil.get_face_vertex_uv(v, face, tx_sz))
print(uv_metadata)
# Append face data to surface array # Append face data to surface array
for i in face.vertices.size(): for i in face.vertices.size():
# TODO: Mesh metadata may be generated here. # TODO: Mesh metadata may be generated here.
@@ -470,6 +477,7 @@ func generate_entity_surfaces(entity_index: int) -> void:
entity.mesh_metadata["normals"] = normals_metadata entity.mesh_metadata["normals"] = normals_metadata
if def.add_face_position_metadata: if def.add_face_position_metadata:
entity.mesh_metadata["positions"] = positions_metadata entity.mesh_metadata["positions"] = positions_metadata
entity.mesh_metadata["uvs"] = uv_metadata
entity.mesh = mesh entity.mesh = mesh

Binary file not shown.

View File

@@ -0,0 +1,42 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://04ag2c3lcicg"
path="res://.godot/imported/soup_can.glb-789b0529ee38a7f623de5835c9b37487.scn"
[deps]
source_file="res://assets/models/soup_can/soup_can.glb"
dest_files=["res://.godot/imported/soup_can.glb-789b0529ee38a7f623de5835c9b37487.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/root_script=null
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
meshes/light_baking=1
meshes/lightmap_texel_size=0.2
meshes/force_disable_compression=false
skins/use_named_skins=true
animation/import=false
animation/fps=30
animation/trimming=false
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={}
gltf/naming_version=2
gltf/embedded_image_handling=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 707 KiB

View File

@@ -0,0 +1,44 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://ck5tahw45mdyg"
path.s3tc="res://.godot/imported/soup_can_AORoughMetal.png-43e2632063d2d19b56c9d0c621da1d76.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
generator_parameters={
"md5": "35b96d6af8c926765a1b0dfedb661ac0"
}
[deps]
source_file="res://assets/models/soup_can/soup_can_AORoughMetal.png"
dest_files=["res://.godot/imported/soup_can_AORoughMetal.png-43e2632063d2d19b56c9d0c621da1d76.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 368 KiB

View File

@@ -0,0 +1,44 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dfacteo6e26uj"
path.s3tc="res://.godot/imported/soup_can_BaseColor.png-6727e8f8d3ac7d832b3d936fe9e3ce00.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
generator_parameters={
"md5": "1860f397e89d1e452194ed3fd622504d"
}
[deps]
source_file="res://assets/models/soup_can/soup_can_BaseColor.png"
dest_files=["res://.godot/imported/soup_can_BaseColor.png-6727e8f8d3ac7d832b3d936fe9e3ce00.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 201 KiB

View File

@@ -0,0 +1,44 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://ct7pciueuljsr"
path.s3tc="res://.godot/imported/soup_can_Normal.png-ecfc9a38b9ec7072ea5bc1197d66919c.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
generator_parameters={
"md5": "eeb4f586a588a0287b05a6d4499c3676"
}
[deps]
source_file="res://assets/models/soup_can/soup_can_Normal.png"
dest_files=["res://.godot/imported/soup_can_Normal.png-ecfc9a38b9ec7072ea5bc1197d66919c.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=1
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=1
roughness/src_normal="res://assets/models/soup_can/soup_can_Normal.png"
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

View File

@@ -11,7 +11,9 @@ enum ExtrudeDirection {
@export var verts2d: PackedVector2Array @export var verts2d: PackedVector2Array
@export var meshInstance3d: MeshInstance3D @export var meshInstance3d: MeshInstance3D
@export var depth: float = 0.1 @export var depth: float = 0.1
@export var depth_position_offset: Vector3 = Vector3.ZERO @export var original_vertices = PackedVector3Array()
@export var original_normals = PackedVector3Array()
@export var original_uvs = PackedVector2Array()
@export_category("TrechBroom User Values") @export_category("TrechBroom User Values")
@export var extrusion_direction: ExtrudeDirection @export var extrusion_direction: ExtrudeDirection
@export var hole_proximity: float @export var hole_proximity: float
@@ -28,7 +30,6 @@ var static_body: StaticBody3D
func _ready() -> void: func _ready() -> void:
if Engine.is_editor_hint(): if Engine.is_editor_hint():
return return
parentNode = get_node("..") parentNode = get_node("..")
inner_polygons = Holes.new() inner_polygons = Holes.new()
inner_rtree = RectangleTree.new() inner_rtree = RectangleTree.new()
@@ -43,6 +44,9 @@ func _exit_tree() -> void:
func _func_godot_apply_properties(entity_properties: Dictionary) -> void: func _func_godot_apply_properties(entity_properties: Dictionary) -> void:
meshInstance3d = _find_mesh_body() meshInstance3d = _find_mesh_body()
var verticies = meshInstance3d.mesh.surface_get_arrays(0)[Mesh.ARRAY_VERTEX] var verticies = meshInstance3d.mesh.surface_get_arrays(0)[Mesh.ARRAY_VERTEX]
original_vertices = self.get_meta("func_godot_mesh_data")["vertices"]
original_normals = self.get_meta("func_godot_mesh_data")["normals"]
original_uvs = self.get_meta("func_godot_mesh_data")["uvs"]
extrusion_direction = entity_properties["extrude_direction"] extrusion_direction = entity_properties["extrude_direction"]
hole_proximity = entity_properties["hole_proximity"] hole_proximity = entity_properties["hole_proximity"]
@@ -63,8 +67,6 @@ func _func_godot_apply_properties(entity_properties: Dictionary) -> void:
elif d < depth_min: elif d < depth_min:
depth_min = d depth_min = d
depth = -(abs(depth_min) + abs(depth_max)) depth = -(abs(depth_min) + abs(depth_max))
depth_position_offset = Vector3.BACK * (depth/2)
elif extrusion_direction == ExtrudeDirection.RIGHT: elif extrusion_direction == ExtrudeDirection.RIGHT:
for vert in verticies: for vert in verticies:
verts_2d.append(Vector2(vert.z, vert.y)) verts_2d.append(Vector2(vert.z, vert.y))
@@ -76,8 +78,6 @@ func _func_godot_apply_properties(entity_properties: Dictionary) -> void:
elif d < depth_min: elif d < depth_min:
depth_min = d depth_min = d
depth = -(abs(depth_min) + abs(depth_max)) depth = -(abs(depth_min) + abs(depth_max))
depth_position_offset = Vector3.RIGHT * (depth/2)
elif extrusion_direction == ExtrudeDirection.UP: elif extrusion_direction == ExtrudeDirection.UP:
for vert in verticies: for vert in verticies:
verts_2d.append(Vector2(vert.x, vert.z)) verts_2d.append(Vector2(vert.x, vert.z))
@@ -89,8 +89,6 @@ func _func_godot_apply_properties(entity_properties: Dictionary) -> void:
elif d < depth_min: elif d < depth_min:
depth_min = d depth_min = d
depth = -(abs(depth_min) + abs(depth_max)) depth = -(abs(depth_min) + abs(depth_max))
depth_position_offset = Vector3.UP * (depth/2)
var outer_boudary = Geometry2D.convex_hull(verts_2d) var outer_boudary = Geometry2D.convex_hull(verts_2d)
verts2d = outer_boudary verts2d = outer_boudary
@@ -102,12 +100,11 @@ func _draw():
vectors.append_array(outer_polygon) vectors.append_array(outer_polygon)
vectors.append_array(inner_polygons.get_hole_verticies()) vectors.append_array(inner_polygons.get_hole_verticies())
var meshGenerator = GeoPolyMesh.new(vector_indexes, vectors, extrusion_direction, depth) var meshGenerator = GeoPolyMesh.new(vector_indexes, vectors, extrusion_direction, original_vertices, original_uvs, original_normals, depth)
var commited_mesh = meshGenerator.commit_mesh(meshInstance3d.get_active_material(0)) var commited_mesh = meshGenerator.commit_mesh(meshInstance3d.get_active_material(0))
meshGenerator.free() meshGenerator.free()
meshInstance3d.mesh = commited_mesh meshInstance3d.mesh = commited_mesh
meshInstance3d.position += depth_position_offset
meshInstance3d.create_trimesh_collision() meshInstance3d.create_trimesh_collision()
static_body = _find_static_body() static_body = _find_static_body()
@@ -131,7 +128,7 @@ func _deffered_draw(mesh: Mesh, task_id: int):
static_body = _find_static_body() static_body = _find_static_body()
func _generate_mesh(vector_indexes: PackedInt32Array, vectors: PackedVector2Array): func _generate_mesh(vector_indexes: PackedInt32Array, vectors: PackedVector2Array):
var meshGenerator = GeoPolyMesh.new(vector_indexes, vectors, extrusion_direction, depth) var meshGenerator = GeoPolyMesh.new(vector_indexes, vectors, extrusion_direction, original_vertices, original_uvs, original_normals, depth)
var commited_mesh = meshGenerator.commit_mesh(meshInstance3d.get_active_material(0)) var commited_mesh = meshGenerator.commit_mesh(meshInstance3d.get_active_material(0))
meshGenerator.free() meshGenerator.free()

View File

@@ -0,0 +1,29 @@
extends RefCounted
class_name Faces
var faces: Array[Face]
func _init(verts: PackedVector3Array, uvs: PackedVector2Array, normals: PackedVector3Array) -> void:
assert(len(verts) == len(uvs), "number of verts vs uvs do not match")
assert(len(normals)*3 == len(verts), "missing normal data")
for i in range(0, len(normals)):
var start_index = i*3
var v0 = verts[start_index]
var v1 = verts[start_index+1]
var v2 = verts[start_index+2]
var varray = PackedVector3Array([v0, v1, v2])
var u0 = uvs[start_index]
var u1 = uvs[start_index+1]
var u2 = uvs[start_index+2]
var uarray = PackedVector2Array([u0, u1, u2])
self.faces.append(Face.new(varray, uarray, normals[i]))
func get_faces() -> Array[Face]:
return faces

View File

@@ -0,0 +1 @@
uid://bw2u2opw8uy82

View File

@@ -9,6 +9,8 @@ var uvs = PackedVector2Array()
var normals = PackedVector3Array() var normals = PackedVector3Array()
var array_mesh = ArrayMesh.new() var array_mesh = ArrayMesh.new()
var original_face_data: Faces
var _v_indexes = [] var _v_indexes = []
var _v_points = [] var _v_points = []
@@ -17,24 +19,25 @@ var edges = {}
var depth_vector: Vector3 var depth_vector: Vector3
var extrude_direction: DestructableWall.ExtrudeDirection var extrude_direction: DestructableWall.ExtrudeDirection
func _init(vector_indexes: PackedInt32Array, vector_points: PackedVector2Array, extrude_direction: DestructableWall.ExtrudeDirection, depth: float = -0.1): func _init(vector_indexes: PackedInt32Array, vector_points: PackedVector2Array, extrude_direction: DestructableWall.ExtrudeDirection, original_vectors: PackedVector3Array, original_uvs: PackedVector2Array, original_normals: PackedVector3Array, depth: float = -0.1):
assert(len(vector_indexes) % 3 == 0 && len(vector_indexes) != 0, "Number of vertex points is not divisible by 3, invalid triangle verticies") assert(len(vector_indexes) % 3 == 0 && len(vector_indexes) != 0, "Number of vertex points is not divisible by 3, invalid triangle verticies")
surface_array.resize(Mesh.ARRAY_MAX) surface_array.resize(Mesh.ARRAY_MAX)
original_face_data = Faces.new(original_vectors, original_uvs, original_normals)
self._v_indexes = vector_indexes self._v_indexes = vector_indexes
self.extrude_direction = extrude_direction self.extrude_direction = extrude_direction
if extrude_direction == DestructableWall.ExtrudeDirection.BACK: if extrude_direction == DestructableWall.ExtrudeDirection.BACK:
for point in vector_points:
self._v_points.append(Vector3(point.x, point.y, 0))
depth_vector = Vector3.BACK * depth depth_vector = Vector3.BACK * depth
elif extrude_direction == DestructableWall.ExtrudeDirection.RIGHT:
for point in vector_points: for point in vector_points:
self._v_points.append(Vector3(0, point.y, point.x)) self._v_points.append(Vector3(point.x, point.y, -depth/2))
elif extrude_direction == DestructableWall.ExtrudeDirection.RIGHT:
depth_vector = Vector3.LEFT * depth depth_vector = Vector3.LEFT * depth
for point in vector_points:
self._v_points.append(Vector3(depth/2, point.y, point.x))
elif extrude_direction == DestructableWall.ExtrudeDirection.UP: elif extrude_direction == DestructableWall.ExtrudeDirection.UP:
for point in vector_points: for point in vector_points:
self._v_points.append(Vector3(point.x, 0, point.y)) self._v_points.append(Vector3(point.x, depth/2, point.y))
depth_vector = Vector3.DOWN * depth depth_vector = Vector3.DOWN * depth
@@ -71,6 +74,38 @@ func _pre_process_edges():
else: else:
self.edges[[min_index, max_index]] += 1 self.edges[[min_index, max_index]] += 1
func in_triag(u, v, w):
return u >= 0 and u <= 1 and v >= 0 and v <= 1 and w >= 0 and w <= 1
func _reduce_significance(value: float):
return snapped(value, 0.0001)
func _new_interpolated_uv_point(new_vector: Vector3, normal: Vector3) -> Vector2:
# get faces that have the same normal e.g faces that the point can fall into
var faces = self.original_face_data.get_faces()
var possible_faces: Array[Face] = []
for f in faces:
if normal.dot(f.normal) > 0.99:
possible_faces.append(f)
for ps in possible_faces:
var ps_face_verts = ps.vectors
var b_points = Geometry3D.get_triangle_barycentric_coords(new_vector, ps_face_verts[0], ps_face_verts[1], ps_face_verts[2])
var u = self._reduce_significance(b_points[0])
var v = self._reduce_significance(b_points[1])
var w = self._reduce_significance(b_points[2])
var uv_coords = ps.uvs
if in_triag(u, v, w):
return (uv_coords[0] * u) + (uv_coords[1] * v) + (uv_coords[2] * w)
# for destructable walls, if we couldn't interpolate a uv, this is fine
return Vector2.ZERO
func get_loops(): func get_loops():
var unvisted_edges = self.get_outline_edge() var unvisted_edges = self.get_outline_edge()
var loops = [] var loops = []
@@ -167,34 +202,16 @@ func _draw_sides():
var n1 = self._calc_triangle_normal(v2, v1, v0) var n1 = self._calc_triangle_normal(v2, v1, v0)
self.verts.append_array([v0, v1, v2, v1, v3, v2]) self.verts.append_array([v0, v1, v2, v1, v3, v2])
_append_uvs4(v0, v1, v2, v3, n1) _append_uvs3(v0, v1, v2, n1)
_append_uvs3(v1, v3, v2, n1)
self.normals.append_array([n1, n1, n1, n1, n1, n1]) self.normals.append_array([n1, n1, n1, n1, n1, n1])
func _append_uvs4(v0: Vector3, v1: Vector3, v2: Vector3, v3: Vector3, normal: Vector3):
if normal == Vector3.BACK or normal == Vector3.FORWARD:
self.uvs.append_array([Vector2(-v0.x, -v0.y), Vector2(-v1.x, -v1.y), Vector2(-v2.x, -v2.y), Vector2(-v1.x, -v1.y), Vector2(-v3.x, -v3.y), Vector2(-v2.x, -v2.y)])
return
elif normal == Vector3.RIGHT or normal == Vector3.LEFT:
self.uvs.append_array([Vector2(-v0.z, -v0.y), Vector2(-v1.z, -v1.y), Vector2(-v2.z, -v2.y), Vector2(-v1.z, -v1.y), Vector2(-v3.z, -v3.y), Vector2(-v2.z, -v2.y)])
return
elif normal == Vector3.UP or normal == Vector3.DOWN:
self.uvs.append_array([Vector2(-v0.x, -v0.z), Vector2(-v1.x, -v1.z), Vector2(-v2.x, -v2.z), Vector2(-v1.x, -v1.z), Vector2(-v3.x, -v3.z), Vector2(-v2.x, -v2.z)])
return
self.uvs.append_array([Vector2(-v0.x, -v0.y), Vector2(-v1.x, -v1.y), Vector2(-v2.x, -v2.y), Vector2(-v1.x, -v1.y), Vector2(-v3.x, -v3.y), Vector2(-v2.x, -v2.y)])
func _append_uvs3(v0: Vector3, v1: Vector3, v2: Vector3, normal: Vector3): func _append_uvs3(v0: Vector3, v1: Vector3, v2: Vector3, normal: Vector3):
if normal == Vector3.BACK or normal == Vector3.FORWARD: var uv0 = self._new_interpolated_uv_point(v0, normal)
self.uvs.append_array([Vector2(-v0.x, -v0.y), Vector2(-v1.x, -v1.y), Vector2(-v2.x, -v2.y)]) var uv1 = self._new_interpolated_uv_point(v1, normal)
return var uv2 = self._new_interpolated_uv_point(v2, normal)
elif normal == Vector3.RIGHT or normal == Vector3.LEFT:
self.uvs.append_array([Vector2(-v0.z, -v0.y), Vector2(-v1.z, -v1.y), Vector2(-v2.z, -v2.y)])
return
elif normal == Vector3.UP or normal == Vector3.DOWN:
self.uvs.append_array([Vector2(-v0.x, -v0.z), Vector2(-v1.x, -v1.z), Vector2(-v2.x, -v2.z)])
return
self.uvs.append_array([Vector2(-v0.x, -v0.y), Vector2(-v1.x, -v1.y), Vector2(-v2.x, -v2.y)]) self.uvs.append_array([uv0, uv1, uv2])
# front face # front face
func _draw_mesh(): func _draw_mesh():
@@ -204,10 +221,9 @@ func _draw_mesh():
var normal = self._calc_triangle_normal(vector3C, vector3B, vector3A) var normal = self._calc_triangle_normal(vector3C, vector3B, vector3A)
self.verts.append_array([vector3A, vector3B, vector3C]) self.verts.append_array([vector3A, vector3B, vector3C])
_append_uvs3(vector3A, vector3B, vector3C, normal) _append_uvs3(vector3A, vector3B, vector3C, normal)
self.normals.append_array([normal, normal, normal]) self.normals.append_array([normal, normal, normal])
# insert each front face into the mesh "clockwise" # insert each front face into the mesh "clockwise"

View File

@@ -0,0 +1,14 @@
extends Resource
class_name Face
var vectors: PackedVector3Array
var uvs: PackedVector2Array
var normal: Vector3
func _init(vectors: PackedVector3Array, uvs: PackedVector2Array, normal: Vector3):
assert(len(vectors) % 3 == 0, "not a face")
assert(len(uvs) == len(vectors), "missing uvs for vectors")
self.vectors = vectors.duplicate()
self.uvs = uvs.duplicate()
self.normal = normal

View File

@@ -0,0 +1 @@
uid://bto8ov1esykmk

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

View File

@@ -1,8 +1,9 @@
[gd_scene load_steps=7 format=3 uid="uid://yr0ymw4fpseu"] [gd_scene load_steps=8 format=3 uid="uid://yr0ymw4fpseu"]
[ext_resource type="PackedScene" uid="uid://b2sgheexmeisv" path="res://levels/test.tscn" id="1_htrvu"] [ext_resource type="PackedScene" uid="uid://b2sgheexmeisv" path="res://levels/test.tscn" id="1_htrvu"]
[ext_resource type="PackedScene" uid="uid://bm4jq3rokgbn2" path="res://scenes/environment/world_environment.tscn" id="3_qd0o6"] [ext_resource type="PackedScene" uid="uid://bm4jq3rokgbn2" path="res://scenes/environment/world_environment.tscn" id="3_qd0o6"]
[ext_resource type="PackedScene" uid="uid://dh8v00nh02l1" path="res://scenes/player/player_controller.tscn" id="4_6lfjr"] [ext_resource type="PackedScene" uid="uid://dh8v00nh02l1" path="res://scenes/player/player_controller.tscn" id="4_6lfjr"]
[ext_resource type="PackedScene" uid="uid://04ag2c3lcicg" path="res://assets/models/soup_can/soup_can.glb" id="4_qd0o6"]
[sub_resource type="Animation" id="Animation_q6206"] [sub_resource type="Animation" id="Animation_q6206"]
resource_name = "Camera_Pan" resource_name = "Camera_Pan"
@@ -96,3 +97,6 @@ libraries = {
} }
autoplay = "Camera_Pan" autoplay = "Camera_Pan"
speed_scale = 0.5 speed_scale = 0.5
[node name="soup_can" parent="." instance=ExtResource("4_qd0o6")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.9325094, 1.736591, -0.044523656)

View File

@@ -8,7 +8,7 @@
[ext_resource type="Script" uid="uid://42cwsrh6jyns" path="res://assets/scripts/environment/destructable/destructable_wall.gd" id="6_u45fp"] [ext_resource type="Script" uid="uid://42cwsrh6jyns" path="res://assets/scripts/environment/destructable/destructable_wall.gd" id="6_u45fp"]
[ext_resource type="Material" uid="uid://ct5j4aamfudvd" path="res://trenchbroom/textures/tile043.tres" id="7_u45fp"] [ext_resource type="Material" uid="uid://ct5j4aamfudvd" path="res://trenchbroom/textures/tile043.tres" id="7_u45fp"]
[sub_resource type="ArrayMesh" id="ArrayMesh_u45fp"] [sub_resource type="ArrayMesh" id="ArrayMesh_2grjb"]
_surfaces = [{ _surfaces = [{
"aabb": AABB(-7, -0.5001221, -5.5, 14, 1.0001221, 11.5), "aabb": AABB(-7, -0.5001221, -5.5, 14, 1.0001221, 11.5),
"attribute_data": PackedByteArray("AABgwQAAgL8AAGBBAACAvwAAYEEACIA/AABgwQAIgD8AAEBBAAiAPwD/L8EACIA/AP8vwQAAgL8AAEBBAACAvwAAQMEAAGBBAABAwQAAYMEA/y9BAABgwQD/L0EAAGBBAABAQQAAYEEA/y/BAABgQQD/L8EAAGDBAABAQQAAYMEAAEDBAACAvwD/L0EAAIC/AP8vQQAIgD8AAEDBAAiAPwAAYEEACIA/AABgwQAIgD8AAGDBAACAvwAAYEEAAIC/"), "attribute_data": PackedByteArray("AABgwQAAgL8AAGBBAACAvwAAYEEACIA/AABgwQAIgD8AAEBBAAiAPwD/L8EACIA/AP8vwQAAgL8AAEBBAACAvwAAQMEAAGBBAABAwQAAYMEA/y9BAABgwQD/L0EAAGBBAABAQQAAYEEA/y/BAABgQQD/L8EAAGDBAABAQQAAYMEAAEDBAACAvwD/L0EAAIC/AP8vQQAIgD8AAEDBAAiAPwAAYEEACIA/AABgwQAIgD8AAGDBAACAvwAAYEEAAIC/"),
@@ -23,10 +23,10 @@ _surfaces = [{
"vertex_data": PackedByteArray("AADgQAAAAD8AALDAAADgwAAAAD8AALDAAADgwAAIAL8AALDAAADgQAAIAL8AALDAAADgwAAIAL8AAMBAAADgwAAIAL8A/6/AAADgwAAAAD8A/6/AAADgwAAAAD8AAMBAAADgwAAAAL8AAMBAAADgQAAAAL8AAMBAAADgQAAAAL8A/6/AAADgwAAAAL8A/6/AAADgwAAAAD8AAMBAAADgwAAAAD8A/6/AAADgQAAAAD8A/6/AAADgQAAAAD8AAMBAAADgQAAAAD8AAMBAAADgQAAAAD8A/6/AAADgQAAIAL8A/6/AAADgQAAIAL8AAMBAAADgQAAIAL8AAMBAAADgwAAIAL8AAMBAAADgwAAAAD8AAMBAAADgQAAAAD8AAMBA/////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+/") "vertex_data": PackedByteArray("AADgQAAAAD8AALDAAADgwAAAAD8AALDAAADgwAAIAL8AALDAAADgQAAIAL8AALDAAADgwAAIAL8AAMBAAADgwAAIAL8A/6/AAADgwAAAAD8A/6/AAADgwAAAAD8AAMBAAADgwAAAAL8AAMBAAADgQAAAAL8AAMBAAADgQAAAAL8A/6/AAADgwAAAAL8A/6/AAADgwAAAAD8AAMBAAADgwAAAAD8A/6/AAADgQAAAAD8A/6/AAADgQAAAAD8AAMBAAADgQAAAAD8AAMBAAADgQAAAAD8A/6/AAADgQAAIAL8A/6/AAADgQAAIAL8AAMBAAADgQAAIAL8AAMBAAADgwAAIAL8AAMBAAADgwAAAAD8AAMBAAADgQAAAAD8AAMBA/////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+/")
}] }]
[sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_2grjb"] [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_qhvcx"]
points = PackedVector3Array(7, 0.5, 6, 7, -0.5, 6, -7, 0.5, 6, -7, -0.5, 6, 7, 0.5, -5.5, 7, -0.5, -5.5, -7, 0.5, -5.5, -7, -0.5, -5.5) points = PackedVector3Array(7, 0.5, 6, 7, -0.5, 6, -7, 0.5, 6, -7, -0.5, 6, 7, 0.5, -5.5, 7, -0.5, -5.5, -7, 0.5, -5.5, -7, -0.5, -5.5)
[sub_resource type="ArrayMesh" id="ArrayMesh_qhvcx"] [sub_resource type="ArrayMesh" id="ArrayMesh_kqvnf"]
_surfaces = [{ _surfaces = [{
"aabb": AABB(-7, -0.50006104, -5.75, 14, 1.0001221, 11.5), "aabb": AABB(-7, -0.50006104, -5.75, 14, 1.0001221, 11.5),
"attribute_data": PackedByteArray("AABgwQAAgL8AAGBBAACAvwAAYEEACIA/AABgwQAIgD8AACBCAAiAPwAAiEEACIA/AACIQQAAgL8AACBCAACAvwAAIMIAAGBBAAAgwgAAYMEAAIjBAABgwQAAiMEAAGBBAAAgQgAAYEEAAIhBAABgQQAAiEEAAGDBAAAgQgAAYMEAACDCAACAvwAAiMEAAIC/AACIwQAIgD8AACDCAAiAPwAAYEEACIA/AABgwQAIgD8AAGDBAACAvwAAYEEAAIC/"), "attribute_data": PackedByteArray("AABgwQAAgL8AAGBBAACAvwAAYEEACIA/AABgwQAIgD8AACBCAAiAPwAAiEEACIA/AACIQQAAgL8AACBCAACAvwAAIMIAAGBBAAAgwgAAYMEAAIjBAABgwQAAiMEAAGBBAAAgQgAAYEEAAIhBAABgQQAAiEEAAGDBAAAgQgAAYMEAACDCAACAvwAAiMEAAIC/AACIwQAIgD8AACDCAAiAPwAAYEEACIA/AABgwQAIgD8AAGDBAACAvwAAYEEAAIC/"),
@@ -41,40 +41,10 @@ _surfaces = [{
"vertex_data": PackedByteArray("AADgQAAEAD8AALjAAADgwAAEAD8AALjAAADgwAAEAL8AALjAAADgQAAEAL8AALjAAADgwAAEAL8AALhAAADgwAAEAL8AALjAAADgwAAEAD8AALjAAADgwAAEAD8AALhAAADgwAD4/74AALhAAADgQAD4/74AALhAAADgQAD4/74AALjAAADgwAD4/74AALjAAADgwAAEAD8AALhAAADgwAAEAD8AALjAAADgQAAEAD8AALjAAADgQAAEAD8AALhAAADgQAAEAD8AALhAAADgQAAEAD8AALjAAADgQAAEAL8AALjAAADgQAAEAL8AALhAAADgQAAEAL8AALhAAADgwAAEAL8AALhAAADgwAAEAD8AALhAAADgQAAEAD8AALhA/////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+/") "vertex_data": PackedByteArray("AADgQAAEAD8AALjAAADgwAAEAD8AALjAAADgwAAEAL8AALjAAADgQAAEAL8AALjAAADgwAAEAL8AALhAAADgwAAEAL8AALjAAADgwAAEAD8AALjAAADgwAAEAD8AALhAAADgwAD4/74AALhAAADgQAD4/74AALhAAADgQAD4/74AALjAAADgwAD4/74AALjAAADgwAAEAD8AALhAAADgwAAEAD8AALjAAADgQAAEAD8AALjAAADgQAAEAD8AALhAAADgQAAEAD8AALhAAADgQAAEAD8AALjAAADgQAAEAL8AALjAAADgQAAEAL8AALhAAADgQAAEAL8AALhAAADgwAAEAL8AALhAAADgwAAEAD8AALhAAADgQAAEAD8AALhA/////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+/")
}] }]
[sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_kqvnf"] [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_eudka"]
points = PackedVector3Array(7, 0.50006104, 5.75, 7, -0.49993896, 5.75, -7, 0.50006104, 5.75, -7, -0.49993896, 5.75, 7, 0.50006104, -5.75, 7, -0.49993896, -5.75, -7, 0.50006104, -5.75, -7, -0.49993896, -5.75) points = PackedVector3Array(7, 0.50006104, 5.75, 7, -0.49993896, 5.75, -7, 0.50006104, 5.75, -7, -0.49993896, 5.75, 7, 0.50006104, -5.75, 7, -0.49993896, -5.75, -7, 0.50006104, -5.75, -7, -0.49993896, -5.75)
[sub_resource type="ArrayMesh" id="ArrayMesh_eudka"] [sub_resource type="ArrayMesh" id="ArrayMesh_rmkky"]
_surfaces = [{
"aabb": AABB(-1, -1.5, -0.5, 2, 3, 1),
"attribute_data": PackedByteArray("AACAPwAA4MAAAEDAAADgwAAAQMAAAIC/AACAPwAAgL8AAMDAAACAvwAAgMAAAIC/AACAwAAA4MAAAMDAAADgwAAAwMAAAEBAAADAwAAAgL8AAIDAAACAvwAAgMAAAEBAAADAQAAAQEAAAIBAAABAQAAAgEAAAIC/AADAQAAAgL8AAMBAAADgwAAAgEAAAODAAACAQAAAgL8AAMBAAACAvwAAgL8AAIC/AABAQAAAgL8AAEBAAADgwAAAgL8AAODA"),
"format": 34359742487,
"index_count": 36,
"index_data": PackedByteArray("AAABAAIAAAACAAMABAAFAAYABAAGAAcACAAJAAoACAAKAAsADAANAA4ADAAOAA8AEAARABIAEAASABMAFAAVABYAFAAWABcA"),
"material": ExtResource("7_u45fp"),
"name": "tile043",
"primitive": 3,
"uv_scale": Vector4(0, 0, 0, 0),
"vertex_count": 24,
"vertex_data": PackedByteArray("AACAPwAAwD8AAAC/AACAvwAAwD8AAAC/AACAvwAAwL8AAAC/AACAPwAAwL8AAAC/AACAvwAAwL8AAAA/AACAvwAAwL8AAAC/AACAvwAAwD8AAAC/AACAvwAAwD8AAAA/AACAvwAAwL8AAAA/AACAPwAAwL8AAAA/AACAPwAAwL8AAAC/AACAvwAAwL8AAAC/AACAvwAAwD8AAAA/AACAvwAAwD8AAAC/AACAPwAAwD8AAAC/AACAPwAAwD8AAAA/AACAPwAAwD8AAAA/AACAPwAAwD8AAAC/AACAPwAAwL8AAAC/AACAPwAAwL8AAAA/AACAPwAAwL8AAAA/AACAvwAAwL8AAAA/AACAvwAAwD8AAAA/AACAPwAAwD8AAAA//////////z//////////P/////////8//////////z8AAP9///8AAAAA/3///wAAAAD/f///AAAAAP9///8AAP9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//3//P////3//f/8/////f/9//z////9//3//P/9//38AAP8//3//fwAA/z//f/9/AAD/P/9//38AAP8/")
}]
[sub_resource type="ArrayMesh" id="ArrayMesh_qtvpr"]
_surfaces = [{
"aabb": AABB(-0.25, -1.5, -2.546875, 0.5, 3, 5.09375),
"attribute_data": PackedByteArray("AADgwAAA4MAA/v/AAADgwAD+/8AAAIC/AADgwAAAgL8AAFA/AACAvwD/L0EAAIC/AP8vQQAA4MAAAFA/AADgwAAAUD8A/v9AAABQPwAA4EAA/y9BAADgQAD/L0EA/v9AAABQvwD+/0AA/y/BAP7/QAD/L8EAAOBAAABQvwAA4EAAAFC/AADgwAD/L8EAAODAAP8vwQAAgL8AAFC/AACAvwAA4EAAAIC/AP7/QAAAgL8A/v9AAADgwAAA4EAAAODA"),
"format": 34359742487,
"index_count": 36,
"index_data": PackedByteArray("AAABAAIAAAACAAMABAAFAAYABAAGAAcACAAJAAoACAAKAAsADAANAA4ADAAOAA8AEAARABIAEAASABMAFAAVABYAFAAWABcA"),
"material": ExtResource("7_u45fp"),
"name": "tile043",
"primitive": 3,
"uv_scale": Vector4(0, 0, 0, 0),
"vertex_count": 24,
"vertex_data": PackedByteArray("AACAPgAAwD8AACPAAOB/vgAAwD8AACPAAOB/vgAAwL8AACPAAACAPgAAwL8AACPAAACAvgAAwL8AACNAAACAvgAAwL8A/iLAAACAvgAAwD8A/iLAAACAvgAAwD8AACNAAOB/vgAAwL8AACNAAACAPgAAwL8AACNAAACAPgAAwL8A/iLAAOB/vgAAwL8A/iLAAOB/vgAAwD8AACNAAOB/vgAAwD8A/iLAAACAPgAAwD8A/iLAAACAPgAAwD8AACNAAACAPgAAwD8AACNAAACAPgAAwD8A/iLAAACAPgAAwL8A/iLAAACAPgAAwL8AACNAAACAPgAAwL8AACNAAOB/vgAAwL8AACNAAOB/vgAAwD8AACNAAACAPgAAwD8AACNA/////////z//////////P/////////8//////////z8AAP9///8AAAAA/3///wAAAAD/f///AAAAAP9///8AAP9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//3//P////3//f/8/////f/9//z////9//3//P/9//38AAP8//3//fwAA/z//f/9/AAD/P/9//38AAP8/")
}]
[sub_resource type="ArrayMesh" id="ArrayMesh_drwxn"]
_surfaces = [{ _surfaces = [{
"aabb": AABB(-1.546875, -0.25, -2, 3.09375, 0.5, 4), "aabb": AABB(-1.546875, -0.25, -2, 3.09375, 0.5, 4),
"attribute_data": PackedByteArray("AAC4QQAAAMAAgIZBAAAAwACAhkEAAIC/AAC4QQAAgL8AAKBAAACAvwAAUEEAAIC/AABQQQAAAMAAAKBAAAAAwAAAoEAAgIbBAACgQAAAuMEAAFBBAAC4wQAAUEEAgIbBAACgwACAhsEAAFDBAICGwQAAUMEAALjBAACgwAAAuMEAAKDAAAAAwAAAUMEAAADAAABQwQAAgL8AAKDAAACAvwAAuMEAAIC/AICGwQAAgL8AgIbBAAAAwAAAuMEAAADA"), "attribute_data": PackedByteArray("AAC4QQAAAMAAgIZBAAAAwACAhkEAAIC/AAC4QQAAgL8AAKBAAACAvwAAUEEAAIC/AABQQQAAAMAAAKBAAAAAwAAAoEAAgIbBAACgQAAAuMEAAFBBAAC4wQAAUEEAgIbBAACgwACAhsEAAFDBAICGwQAAUMEAALjBAACgwAAAuMEAAKDAAAAAwAAAUMEAAADAAABQwQAAgL8AAKDAAACAvwAAuMEAAIC/AICGwQAAgL8AgIbBAAAAwAAAuMEAAADA"),
@@ -89,7 +59,7 @@ _surfaces = [{
"vertex_data": PackedByteArray("AADGPwAAgD4AAADAAADGvwAAgD4AAADAAADGvwAAgL4AAADAAADGPwAAgL4AAADAAADGvwAAgL4AAABAAADGvwAAgL4AAADAAADGvwAAgD4AAADAAADGvwAAgD4AAABAAADGvwAAgL4AAABAAADGPwAAgL4AAABAAADGPwAAgL4AAADAAADGvwAAgL4AAADAAADGvwAAgD4AAABAAADGvwAAgD4AAADAAADGPwAAgD4AAADAAADGPwAAgD4AAABAAADGPwAAgD4AAABAAADGPwAAgD4AAADAAADGPwAAgL4AAADAAADGPwAAgL4AAABAAADGPwAAgL4AAABAAADGvwAAgL4AAABAAADGvwAAgD4AAABAAADGPwAAgD4AAABA/////////z//////////P/////////8//////////z8AAP9///8AAAAA/3///wAAAAD/f///AAAAAP9///8AAP9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//3//P////3//f/8/////f/9//z////9//3//P/9//38AAP8//3//fwAA/z//f/9/AAD/P/9//38AAP8/") "vertex_data": PackedByteArray("AADGPwAAgD4AAADAAADGvwAAgD4AAADAAADGvwAAgL4AAADAAADGPwAAgL4AAADAAADGvwAAgL4AAABAAADGvwAAgL4AAADAAADGvwAAgD4AAADAAADGvwAAgD4AAABAAADGvwAAgL4AAABAAADGPwAAgL4AAABAAADGPwAAgL4AAADAAADGvwAAgL4AAADAAADGvwAAgD4AAABAAADGvwAAgD4AAADAAADGPwAAgD4AAADAAADGPwAAgD4AAABAAADGPwAAgD4AAABAAADGPwAAgD4AAADAAADGPwAAgL4AAADAAADGPwAAgL4AAABAAADGPwAAgL4AAABAAADGvwAAgL4AAABAAADGvwAAgD4AAABAAADGPwAAgD4AAABA/////////z//////////P/////////8//////////z8AAP9///8AAAAA/3///wAAAAD/f///AAAAAP9///8AAP9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//3//P////3//f/8/////f/9//z////9//3//P/9//38AAP8//3//fwAA/z//f/9/AAD/P/9//38AAP8/")
}] }]
[sub_resource type="ArrayMesh" id="ArrayMesh_rmkky"] [sub_resource type="ArrayMesh" id="ArrayMesh_lqn8c"]
_surfaces = [{ _surfaces = [{
"aabb": AABB(-1.046875, -1.5, -0.5, 2.09375, 3, 1), "aabb": AABB(-1.046875, -1.5, -0.5, 2.09375, 3, 1),
"attribute_data": PackedByteArray("AADAQAAA4MAAAOg/AADgwAAA6D8AAIC/AADAQAAAgL8AAMDAAACAvwAAgMAAAIC/AACAwAAA4MAAAMDAAADgwAAAwMAAAOi/AADAwAAAwMAAAIDAAADAwAAAgMAAAOi/AADAQAAA6L8AAIBAAADovwAAgEAAAMDAAADAQAAAwMAAAMBAAADgwAAAgEAAAODAAACAQAAAgL8AAMBAAACAvwAAwMAAAIC/AADovwAAgL8AAOi/AADgwAAAwMAAAODA"), "attribute_data": PackedByteArray("AADAQAAA4MAAAOg/AADgwAAA6D8AAIC/AADAQAAAgL8AAMDAAACAvwAAgMAAAIC/AACAwAAA4MAAAMDAAADgwAAAwMAAAOi/AADAwAAAwMAAAIDAAADAwAAAgMAAAOi/AADAQAAA6L8AAIBAAADovwAAgEAAAMDAAADAQAAAwMAAAMBAAADgwAAAgEAAAODAAACAQAAAgL8AAMBAAACAvwAAwMAAAIC/AADovwAAgL8AAOi/AADgwAAAwMAAAODA"),
@@ -104,10 +74,17 @@ _surfaces = [{
"vertex_data": PackedByteArray("AACGPwAAwD8AAAC/AACGvwAAwD8AAAC/AACGvwAAwL8AAAC/AACGPwAAwL8AAAC/AACGvwAAwL8AAAA/AACGvwAAwL8AAAC/AACGvwAAwD8AAAC/AACGvwAAwD8AAAA/AACGvwAAwL8AAAA/AACGPwAAwL8AAAA/AACGPwAAwL8AAAC/AACGvwAAwL8AAAC/AACGvwAAwD8AAAA/AACGvwAAwD8AAAC/AACGPwAAwD8AAAC/AACGPwAAwD8AAAA/AACGPwAAwD8AAAA/AACGPwAAwD8AAAC/AACGPwAAwL8AAAC/AACGPwAAwL8AAAA/AACGPwAAwL8AAAA/AACGvwAAwL8AAAA/AACGvwAAwD8AAAA/AACGPwAAwD8AAAA//////////z//////////P/////////8//////////z8AAP9///8AAAAA/3///wAAAAD/f///AAAAAP9///8AAP9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//3//P////3//f/8/////f/9//z////9//3//P/9//38AAP8//3//fwAA/z//f/9/AAD/P/9//38AAP8/") "vertex_data": PackedByteArray("AACGPwAAwD8AAAC/AACGvwAAwD8AAAC/AACGvwAAwL8AAAC/AACGPwAAwL8AAAC/AACGvwAAwL8AAAA/AACGvwAAwL8AAAC/AACGvwAAwD8AAAC/AACGvwAAwD8AAAA/AACGvwAAwL8AAAA/AACGPwAAwL8AAAA/AACGPwAAwL8AAAC/AACGvwAAwL8AAAC/AACGvwAAwD8AAAA/AACGvwAAwD8AAAC/AACGPwAAwD8AAAC/AACGPwAAwD8AAAA/AACGPwAAwD8AAAA/AACGPwAAwD8AAAC/AACGPwAAwL8AAAC/AACGPwAAwL8AAAA/AACGPwAAwL8AAAA/AACGvwAAwL8AAAA/AACGvwAAwD8AAAA/AACGPwAAwD8AAAA//////////z//////////P/////////8//////////z8AAP9///8AAAAA/3///wAAAAD/f///AAAAAP9///8AAP9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//3//P////3//f/8/////f/9//z////9//3//P/9//38AAP8//3//fwAA/z//f/9/AAD/P/9//38AAP8/")
}] }]
[sub_resource type="ArrayMesh" id="ArrayMesh_epu3l"] [sub_resource type="ArrayOccluder3D" id="ArrayOccluder3D_08uri"]
vertices = PackedVector3Array(1.046875, 1.5, -0.5, -1.046875, 1.5, -0.5, -1.046875, -1.5, -0.5, 1.046875, -1.5, -0.5, -1.046875, -1.5, 0.5, -1.046875, -1.5, -0.5, -1.046875, 1.5, -0.5, -1.046875, 1.5, 0.5, -1.046875, -1.5, 0.5, 1.046875, -1.5, 0.5, 1.046875, -1.5, -0.5, -1.046875, -1.5, -0.5, -1.046875, 1.5, 0.5, -1.046875, 1.5, -0.5, 1.046875, 1.5, -0.5, 1.046875, 1.5, 0.5, 1.046875, 1.5, 0.5, 1.046875, 1.5, -0.5, 1.046875, -1.5, -0.5, 1.046875, -1.5, 0.5, 1.046875, -1.5, 0.5, -1.046875, -1.5, 0.5, -1.046875, 1.5, 0.5, 1.046875, 1.5, 0.5)
indices = PackedInt32Array(0, 1, 2, 0, 2, 3, 4, 5, 6, 4, 6, 7, 8, 9, 10, 8, 10, 11, 12, 13, 14, 12, 14, 15, 16, 17, 18, 16, 18, 19, 20, 21, 22, 20, 22, 23)
[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_fivcu"]
data = PackedVector3Array(1.046875, 1.5, -0.5, -1.046875, 1.5, -0.5, -1.046875, -1.5, -0.5, 1.046875, 1.5, -0.5, -1.046875, -1.5, -0.5, 1.046875, -1.5, -0.5, -1.046875, -1.5, 0.5, -1.046875, -1.5, -0.5, -1.046875, 1.5, -0.5, -1.046875, -1.5, 0.5, -1.046875, 1.5, -0.5, -1.046875, 1.5, 0.5, -1.046875, -1.5, 0.5, 1.046875, -1.5, 0.5, 1.046875, -1.5, -0.5, -1.046875, -1.5, 0.5, 1.046875, -1.5, -0.5, -1.046875, -1.5, -0.5, -1.046875, 1.5, 0.5, -1.046875, 1.5, -0.5, 1.046875, 1.5, -0.5, -1.046875, 1.5, 0.5, 1.046875, 1.5, -0.5, 1.046875, 1.5, 0.5, 1.046875, 1.5, 0.5, 1.046875, 1.5, -0.5, 1.046875, -1.5, -0.5, 1.046875, 1.5, 0.5, 1.046875, -1.5, -0.5, 1.046875, -1.5, 0.5, 1.046875, -1.5, 0.5, -1.046875, -1.5, 0.5, -1.046875, 1.5, 0.5, 1.046875, -1.5, 0.5, -1.046875, 1.5, 0.5, 1.046875, 1.5, 0.5)
[sub_resource type="ArrayMesh" id="ArrayMesh_uy2g7"]
_surfaces = [{ _surfaces = [{
"aabb": AABB(-0.25, -1.5, -2.546875, 0.5, 3, 5.09375), "aabb": AABB(-0.25, -1.5, -2.546875, 0.5, 3, 5.09375),
"attribute_data": PackedByteArray("AADgwAAA4MAA/v/AAADgwAD+/8AAAIC/AADgwAAAgL8AACPBAACAvwAAAKcAAIC/AAAApwAA4MAAACPBAADgwAAAI8EA/v9AAAAjwQAA4EAAAAAAAADgQAAAAAAA/v9AAAAjQQD+/0AAAAAAAP7/QAAAAAAAAOBAAAAjQQAA4EAAACNBAADgwAAA4CYAAODAAADgJgAAgL8AACNBAACAvwAA4EAAAIC/AP7/QAAAgL8A/v9AAADgwAAA4EAAAODA"), "attribute_data": PackedByteArray("AAAAwQAA4MAAABDBAADgwAAAEMEAAIC/AAAAwQAAgL8AACPBAACAvwAAEKcAAIC/AAAQpwAA4MAAACPBAADgwAAAI8EAABBBAAAjwQAAAEEAAAAAAAAAQQAAAAAAABBBAAAjQQAAEEEAAAAAAAAQQQAAAAAAAABBAAAjQQAAAEEAACNBAADgwAAAACcAAODAAAAAJwAAgL8AACNBAACAvwAAAEEAAIC/AAAQQQAAgL8AABBBAADgwAAAAEEAAODA"),
"format": 34359742487, "format": 34359742487,
"index_count": 36, "index_count": 36,
"index_data": PackedByteArray("AAABAAIAAAACAAMABAAFAAYABAAGAAcACAAJAAoACAAKAAsADAANAA4ADAAOAA8AEAARABIAEAASABMAFAAVABYAFAAWABcA"), "index_data": PackedByteArray("AAABAAIAAAACAAMABAAFAAYABAAGAAcACAAJAAoACAAKAAsADAANAA4ADAAOAA8AEAARABIAEAASABMAFAAVABYAFAAWABcA"),
@@ -116,38 +93,15 @@ _surfaces = [{
"primitive": 3, "primitive": 3,
"uv_scale": Vector4(0, 0, 0, 0), "uv_scale": Vector4(0, 0, 0, 0),
"vertex_count": 24, "vertex_count": 24,
"vertex_data": PackedByteArray("AACAPgAAwD8AACPAAOB/vgAAwD8AACPAAOB/vgAAwL8AACPAAACAPgAAwL8AACPAAACAvgAAwL8AACNAAACAvgAAwL8AACPAAACAvgAAwD8AACPAAACAvgAAwD8AACNAAOB/vgAAwL8AACNAAACAPgAAwL8AACNAAACAPgAAwL8AACPAAOB/vgAAwL8AACPAAOB/vgAAwD8AACNAAOB/vgAAwD8AACPAAACAPgAAwD8AACPAAACAPgAAwD8AACNAAACAPgAAwD8AACNAAACAPgAAwD8AACPAAACAPgAAwL8AACPAAACAPgAAwL8AACNAAACAPgAAwL8AACNAAOB/vgAAwL8AACNAAOB/vgAAwD8AACNAAACAPgAAwD8AACNA/////////z//////////P/////////8//////////z8AAP9///8AAAAA/3///wAAAAD/f///AAAAAP9///8AAP9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//3//P////3//f/8/////f/9//z////9//3//P/9//38AAP8//3//fwAA/z//f/9/AAD/P/9//38AAP8/") "vertex_data": PackedByteArray("AACAPgAAwD8AACPAAACAvgAAwD8AACPAAACAvgAAwL8AACPAAACAPgAAwL8AACPAAACAvgAAwL8AACNAAACAvgAAwL8AACPAAACAvgAAwD8AACPAAACAvgAAwD8AACNAAACAvgAAwL8AACNAAACAPgAAwL8AACNAAACAPgAAwL8AACPAAACAvgAAwL8AACPAAACAvgAAwD8AACNAAACAvgAAwD8AACPAAACAPgAAwD8AACPAAACAPgAAwD8AACNAAACAPgAAwD8AACNAAACAPgAAwD8AACPAAACAPgAAwL8AACPAAACAPgAAwL8AACNAAACAPgAAwL8AACNAAACAvgAAwL8AACNAAACAvgAAwD8AACNAAACAPgAAwD8AACNA/////////z//////////P/////////8//////////z8AAP9///8AAAAA/3///wAAAAD/f///AAAAAP9///8AAP9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//3//P////3//f/8/////f/9//z////9//3//P/9//38AAP8//3//fwAA/z//f/9/AAD/P/9//38AAP8/")
}] }]
[sub_resource type="ArrayMesh" id="ArrayMesh_lqn8c"] [sub_resource type="ArrayOccluder3D" id="ArrayOccluder3D_u1nm5"]
_surfaces = [{ vertices = PackedVector3Array(0.25, 1.5, -2.546875, -0.25, 1.5, -2.546875, -0.25, -1.5, -2.546875, 0.25, -1.5, -2.546875, -0.25, -1.5, 2.546875, -0.25, -1.5, -2.546875, -0.25, 1.5, -2.546875, -0.25, 1.5, 2.546875, -0.25, -1.5, 2.546875, 0.25, -1.5, 2.546875, 0.25, -1.5, -2.546875, -0.25, -1.5, -2.546875, -0.25, 1.5, 2.546875, -0.25, 1.5, -2.546875, 0.25, 1.5, -2.546875, 0.25, 1.5, 2.546875, 0.25, 1.5, 2.546875, 0.25, 1.5, -2.546875, 0.25, -1.5, -2.546875, 0.25, -1.5, 2.546875, 0.25, -1.5, 2.546875, -0.25, -1.5, 2.546875, -0.25, 1.5, 2.546875, 0.25, 1.5, 2.546875)
"aabb": AABB(-1.0000001, -0.50000006, -0.7500305, 2, 1, 1.500061), indices = PackedInt32Array(0, 1, 2, 0, 2, 3, 4, 5, 6, 4, 6, 7, 8, 9, 10, 8, 10, 11, 12, 13, 14, 12, 14, 15, 16, 17, 18, 16, 18, 19, 20, 21, 22, 20, 22, 23)
"attribute_data": PackedByteArray("AACAwP7/f78C/v/A/v9/vwAAgMAA/j/AAAAAwQAAQMAAAoDAAABAwAAAAMEABIC/AADAwAAAgL8AABDBAACAvwAAEMEAAEDAAADAwAAAQMAAAMBA//9/wAAAwEAAAADBAAAAQQAAAMHAAABBAP7/wIAAEEH//3/AAADAwAAAgMAAABDBAACAwAAAwMAAAADBAADAQAAAQMAAAABBAACAvwAAwEAAAIC/AAAAQQAAgL8AAIBAAACAvwAAgEAAAEDAVf3/QAAAQMAAAABB//s/wA=="),
"format": 34359742487,
"index_count": 36,
"index_data": PackedByteArray("AAABAAIAAwAEAAUABgAHAAgABgAIAAkACgALAAwACgAMAA0ACgANAA4ADwAQABEAEgATABQAFQAWABcAFQAXABgAFQAYABkA"),
"material": ExtResource("7_u45fp"),
"name": "tile043",
"primitive": 3,
"uv_scale": Vector4(0, 0, 0, 0),
"vertex_count": 26,
"vertex_data": PackedByteArray("AACAvwEAAL8A/j+/CPh/PwEAAL8AAIC+AACAvwD4/z4A/j+/AACAPwAAAD8AAEA/APh/vwAAAD8A+j+/AACAPwD4/74A8H++AACAvwAAAL8AAkA/AACAvwAAAL8A/j+/AACAvwAAAD8A/j+/AACAvwAAAD8AAkA/AQCAvwAAAL8AAkA/AACAPwAAAL8AAkA/AACAPwAAAL8A+H++APh/PwAAAL8ACIC+AQCAvwAAAL8AAkC/AACAvwAAAD8AAkA/AACAvwAAAD8A/j+/AACAPwAAAD8AAkA/AACAPwAAAD8AAkA/AACAPwAAAL8A+H++AACAPwAAAL8AAkA/AACAPwAAAL8AAkA/AACAvwAAAL8AAkA/AACAvwAAAD8AAkA/VPV/PwAAAD8AAkA/AACAP/zv/z4AAkA///9l5gAA/7///2XmAAD/v///ZeYAAP+/c9EW3QAA/79z0RbdAAD/v3PRFt0AAP+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+/////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////vw==")
}]
[sub_resource type="ArrayMesh" id="ArrayMesh_08uri"] [sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_1w0m8"]
_surfaces = [{ data = PackedVector3Array(0.25, 1.5, -2.546875, -0.25, 1.5, -2.546875, -0.25, -1.5, -2.546875, 0.25, 1.5, -2.546875, -0.25, -1.5, -2.546875, 0.25, -1.5, -2.546875, -0.25, -1.5, 2.546875, -0.25, -1.5, -2.546875, -0.25, 1.5, -2.546875, -0.25, -1.5, 2.546875, -0.25, 1.5, -2.546875, -0.25, 1.5, 2.546875, -0.25, -1.5, 2.546875, 0.25, -1.5, 2.546875, 0.25, -1.5, -2.546875, -0.25, -1.5, 2.546875, 0.25, -1.5, -2.546875, -0.25, -1.5, -2.546875, -0.25, 1.5, 2.546875, -0.25, 1.5, -2.546875, 0.25, 1.5, -2.546875, -0.25, 1.5, 2.546875, 0.25, 1.5, -2.546875, 0.25, 1.5, 2.546875, 0.25, 1.5, 2.546875, 0.25, 1.5, -2.546875, 0.25, -1.5, -2.546875, 0.25, 1.5, 2.546875, 0.25, -1.5, -2.546875, 0.25, -1.5, 2.546875, 0.25, -1.5, 2.546875, -0.25, -1.5, 2.546875, -0.25, 1.5, 2.546875, 0.25, -1.5, 2.546875, -0.25, 1.5, 2.546875, 0.25, 1.5, 2.546875)
"aabb": AABB(-1.046875, -1.5, -0.015625, 2.09375, 3, 0.03125),
"attribute_data": PackedByteArray("AACAPwAA4MAAAEzAAADgwAAATMAAAIC/AACAPwAAgL8AAAHBAACAvwAAAMEAAIC/AAAAwQAA4MAAAAHBAADgwAAAAcEAAExAAAABwQAAgL8AAADBAACAvwAAAMEAAExAAAABQQAATEAAAABBAABMQAAAAEEAAIC/AAABQQAAgL8AAAFBAADgwAAAAEEAAODAAAAAQQAAgL8AAAFBAACAvwAAgL8AAIC/AABMQAAAgL8AAExAAADgwAAAgL8AAODA"),
"format": 34359742487,
"index_count": 36,
"index_data": PackedByteArray("AAABAAIAAAACAAMABAAFAAYABAAGAAcACAAJAAoACAAKAAsADAANAA4ADAAOAA8AEAARABIAEAASABMAFAAVABYAFAAWABcA"),
"material": ExtResource("7_u45fp"),
"name": "tile043",
"primitive": 3,
"uv_scale": Vector4(0, 0, 0, 0),
"vertex_count": 24,
"vertex_data": PackedByteArray("AACGPwAAwD8AAIC8AACGvwAAwD8AAIC8AACGvwAAwL8AAIC8AACGPwAAwL8AAIC8AACGvwAAwL8AAIA8AACGvwAAwL8AAIC8AACGvwAAwD8AAIC8AACGvwAAwD8AAIA8AACGvwAAwL8AAIA8AACGPwAAwL8AAIA8AACGPwAAwL8AAIC8AACGvwAAwL8AAIC8AACGvwAAwD8AAIA8AACGvwAAwD8AAIC8AACGPwAAwD8AAIC8AACGPwAAwD8AAIA8AACGPwAAwD8AAIA8AACGPwAAwD8AAIC8AACGPwAAwL8AAIC8AACGPwAAwL8AAIA8AACGPwAAwL8AAIA8AACGvwAAwL8AAIA8AACGvwAAwD8AAIA8AACGPwAAwD8AAIA8/////////z//////////P/////////8//////////z8AAP9///8AAAAA/3///wAAAAD/f///AAAAAP9///8AAP9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//3//P////3//f/8/////f/9//z////9//3//P/9//38AAP8//3//fwAA/z//f/9/AAD/P/9//38AAP8/")
}]
[node name="Test" type="Node3D"] [node name="Test" type="Node3D"]
@@ -159,49 +113,28 @@ metadata/_custom_type_script = "uid://cwu5cf7a0awcd"
[node name="entity_0_worldspawn" type="StaticBody3D" parent="FuncGodotMap"] [node name="entity_0_worldspawn" type="StaticBody3D" parent="FuncGodotMap"]
collision_mask = 0 collision_mask = 0
metadata/func_godot_mesh_data = {
"uvs": PackedVector2Array(-14, -1, 14, -1, 14, 1.0002441, -14, -1, 14, 1.0002441, -14, 1.0002441, 12, 1.0002441, -10.999756, 1.0002441, -10.999756, -1, 12, 1.0002441, -10.999756, -1, 12, -1, -12, 14, -12, -14, 10.999756, -14, -12, 14, 10.999756, -14, 10.999756, 14, 12, 14, -10.999756, 14, -10.999756, -14, 12, 14, -10.999756, -14, 12, -14, -12, -1, 10.999756, -1, 10.999756, 1.0002441, -12, -1, 10.999756, 1.0002441, -12, 1.0002441, 14, 1.0002441, -14, 1.0002441, -14, -1, 14, 1.0002441, -14, -1, 14, -1)
}
[node name="entity_0_mesh_instance" type="MeshInstance3D" parent="FuncGodotMap/entity_0_worldspawn"] [node name="entity_0_mesh_instance" type="MeshInstance3D" parent="FuncGodotMap/entity_0_worldspawn"]
mesh = SubResource("ArrayMesh_u45fp") mesh = SubResource("ArrayMesh_2grjb")
[node name="entity_0_brush_0_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] [node name="entity_0_brush_0_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"]
shape = SubResource("ConvexPolygonShape3D_2grjb") shape = SubResource("ConvexPolygonShape3D_qhvcx")
[node name="entity_1_func_movingplatform" type="AnimatableBody3D" parent="FuncGodotMap"] [node name="entity_1_func_movingplatform" type="AnimatableBody3D" parent="FuncGodotMap"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -6.1035156e-05, 14.25) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -6.1035156e-05, 14.25)
script = ExtResource("4_6g8e2") script = ExtResource("4_6g8e2")
metadata/func_godot_mesh_data = {
"uvs": PackedVector2Array(-14, -1, 14, -1, 14, 1.0002441, -14, -1, 14, 1.0002441, -14, 1.0002441, 40, 1.0002441, 17, 1.0002441, 17, -1, 40, 1.0002441, 17, -1, 40, -1, -40, 14, -40, -14, -17, -14, -40, 14, -17, -14, -17, 14, 40, 14, 17, 14, 17, -14, 40, 14, 17, -14, 40, -14, -40, -1, -17, -1, -17, 1.0002441, -40, -1, -17, 1.0002441, -40, 1.0002441, 14, 1.0002441, -14, 1.0002441, -14, -1, 14, 1.0002441, -14, -1, 14, -1)
}
[node name="entity_1_mesh_instance" type="MeshInstance3D" parent="FuncGodotMap/entity_1_func_movingplatform"] [node name="entity_1_mesh_instance" type="MeshInstance3D" parent="FuncGodotMap/entity_1_func_movingplatform"]
mesh = SubResource("ArrayMesh_qhvcx") mesh = SubResource("ArrayMesh_kqvnf")
[node name="entity_1_brush_0_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_1_func_movingplatform"] [node name="entity_1_brush_0_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_1_func_movingplatform"]
shape = SubResource("ConvexPolygonShape3D_kqvnf") shape = SubResource("ConvexPolygonShape3D_eudka")
[node name="entity_2_func_destructablewall" type="Node3D" parent="FuncGodotMap" node_paths=PackedStringArray("meshInstance3d")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 2, 2.5)
script = ExtResource("6_u45fp")
verts2d = PackedVector2Array(-1, -1.5, 1, -1.5, 1, 1.5, -1, 1.5, -1, -1.5)
meshInstance3d = NodePath("entity_2_mesh_instance")
depth = -1.0
depth_position_offset = Vector3(0, 0, 0.5)
hole_proximity = 1.0
edge_non_fracture = 0.01
[node name="entity_2_mesh_instance" type="MeshInstance3D" parent="FuncGodotMap/entity_2_func_destructablewall"]
mesh = SubResource("ArrayMesh_eudka")
[node name="entity_3_func_destructablewall" type="Node3D" parent="FuncGodotMap" node_paths=PackedStringArray("meshInstance3d")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3.75, 2, -2.953125)
script = ExtResource("6_u45fp")
verts2d = PackedVector2Array(-2.546875, -1.5, 2.546875, -1.5, 2.546875, 1.5, -2.546875, 1.5, -2.546875, -1.5)
meshInstance3d = NodePath("entity_3_mesh_instance")
depth = -0.5
depth_position_offset = Vector3(-0.25, 0, 0)
extrusion_direction = 1
hole_proximity = 1.0
edge_non_fracture = 0.01
[node name="entity_3_mesh_instance" type="MeshInstance3D" parent="FuncGodotMap/entity_3_func_destructablewall"]
mesh = SubResource("ArrayMesh_qtvpr")
[node name="entity_4_func_destructablewall" type="Node3D" parent="FuncGodotMap" node_paths=PackedStringArray("meshInstance3d")] [node name="entity_4_func_destructablewall" type="Node3D" parent="FuncGodotMap" node_paths=PackedStringArray("meshInstance3d")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 9.953125, 0.75, -4.5) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 9.953125, 0.75, -4.5)
@@ -209,64 +142,56 @@ script = ExtResource("6_u45fp")
verts2d = PackedVector2Array(-1.546875, -2, 1.546875, -2, 1.546875, 2, -1.546875, 2, -1.546875, -2) verts2d = PackedVector2Array(-1.546875, -2, 1.546875, -2, 1.546875, 2, -1.546875, 2, -1.546875, -2)
meshInstance3d = NodePath("entity_4_mesh_instance") meshInstance3d = NodePath("entity_4_mesh_instance")
depth = -0.5 depth = -0.5
depth_position_offset = Vector3(0, -0.25, 0) original_vertices = PackedVector3Array(1.546875, 0.25, -2, -1.546875, 0.25, -2, -1.546875, -0.25, -2, 1.546875, 0.25, -2, -1.546875, -0.25, -2, 1.546875, -0.25, -2, -1.546875, -0.25, 2, -1.546875, -0.25, -2, -1.546875, 0.25, -2, -1.546875, -0.25, 2, -1.546875, 0.25, -2, -1.546875, 0.25, 2, -1.546875, -0.25, 2, 1.546875, -0.25, 2, 1.546875, -0.25, -2, -1.546875, -0.25, 2, 1.546875, -0.25, -2, -1.546875, -0.25, -2, -1.546875, 0.25, 2, -1.546875, 0.25, -2, 1.546875, 0.25, -2, -1.546875, 0.25, 2, 1.546875, 0.25, -2, 1.546875, 0.25, 2, 1.546875, 0.25, 2, 1.546875, 0.25, -2, 1.546875, -0.25, -2, 1.546875, 0.25, 2, 1.546875, -0.25, -2, 1.546875, -0.25, 2, 1.546875, -0.25, 2, -1.546875, -0.25, 2, -1.546875, 0.25, 2, 1.546875, -0.25, 2, -1.546875, 0.25, 2, 1.546875, 0.25, 2)
original_normals = PackedVector3Array(0, 0, -1, 0, 0, -1, -1, 0, 0, -1, 0, 0, 0, -1, 0, 0, -1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1)
original_uvs = PackedVector2Array(23, -2, 16.8125, -2, 16.8125, -1, 23, -2, 16.8125, -1, 23, -1, 5, -1, 13, -1, 13, -2, 5, -1, 13, -2, 5, -2, 5, -16.8125, 5, -23, 13, -23, 5, -16.8125, 13, -23, 13, -16.8125, -5, -16.8125, -13, -16.8125, -13, -23, -5, -16.8125, -13, -23, -5, -23, -5, -2, -13, -2, -13, -1, -5, -2, -13, -1, -5, -1, -23, -1, -16.8125, -1, -16.8125, -2, -23, -1, -16.8125, -2, -23, -2)
extrusion_direction = 2 extrusion_direction = 2
hole_proximity = 1.0 hole_proximity = 1.0
edge_non_fracture = 0.01 edge_non_fracture = 0.01
metadata/func_godot_mesh_data = {
"normals": PackedVector3Array(0, 0, -1, 0, 0, -1, -1, 0, 0, -1, 0, 0, 0, -1, 0, 0, -1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1),
"texture_names": Array[StringName]([&"tile043"]),
"textures": PackedInt32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
"uvs": PackedVector2Array(23, -2, 16.8125, -2, 16.8125, -1, 23, -2, 16.8125, -1, 23, -1, 5, -1, 13, -1, 13, -2, 5, -1, 13, -2, 5, -2, 5, -16.8125, 5, -23, 13, -23, 5, -16.8125, 13, -23, 13, -16.8125, -5, -16.8125, -13, -16.8125, -13, -23, -5, -16.8125, -13, -23, -5, -23, -5, -2, -13, -2, -13, -1, -5, -2, -13, -1, -5, -1, -23, -1, -16.8125, -1, -16.8125, -2, -23, -1, -16.8125, -2, -23, -2),
"vertices": PackedVector3Array(1.546875, 0.25, -2, -1.546875, 0.25, -2, -1.546875, -0.25, -2, 1.546875, 0.25, -2, -1.546875, -0.25, -2, 1.546875, -0.25, -2, -1.546875, -0.25, 2, -1.546875, -0.25, -2, -1.546875, 0.25, -2, -1.546875, -0.25, 2, -1.546875, 0.25, -2, -1.546875, 0.25, 2, -1.546875, -0.25, 2, 1.546875, -0.25, 2, 1.546875, -0.25, -2, -1.546875, -0.25, 2, 1.546875, -0.25, -2, -1.546875, -0.25, -2, -1.546875, 0.25, 2, -1.546875, 0.25, -2, 1.546875, 0.25, -2, -1.546875, 0.25, 2, 1.546875, 0.25, -2, 1.546875, 0.25, 2, 1.546875, 0.25, 2, 1.546875, 0.25, -2, 1.546875, -0.25, -2, 1.546875, 0.25, 2, 1.546875, -0.25, -2, 1.546875, -0.25, 2, 1.546875, -0.25, 2, -1.546875, -0.25, 2, -1.546875, 0.25, 2, 1.546875, -0.25, 2, -1.546875, 0.25, 2, 1.546875, 0.25, 2)
}
[node name="entity_4_mesh_instance" type="MeshInstance3D" parent="FuncGodotMap/entity_4_func_destructablewall"] [node name="entity_4_mesh_instance" type="MeshInstance3D" parent="FuncGodotMap/entity_4_func_destructablewall"]
mesh = SubResource("ArrayMesh_drwxn")
[node name="entity_5_func_destructablewall" type="Node3D" parent="FuncGodotMap" node_paths=PackedStringArray("meshInstance3d")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.953125, 2, 2.5)
script = ExtResource("6_u45fp")
verts2d = PackedVector2Array(-1.046875, -1.5, 1.046875, -1.5, 1.046875, 1.5, -1.046875, 1.5, -1.046875, -1.5)
meshInstance3d = NodePath("entity_5_mesh_instance")
depth = -1.0
depth_position_offset = Vector3(0, 0, 0.5)
hole_proximity = 1.0
edge_non_fracture = 0.01
[node name="entity_5_mesh_instance" type="MeshInstance3D" parent="FuncGodotMap/entity_5_func_destructablewall"]
mesh = SubResource("ArrayMesh_rmkky") mesh = SubResource("ArrayMesh_rmkky")
[node name="entity_6_func_destructablewall" type="Node3D" parent="FuncGodotMap" node_paths=PackedStringArray("meshInstance3d")] [node name="entity_6_func_geo" type="StaticBody3D" parent="FuncGodotMap"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3.75, 2, 2.546875) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.953125, 2, 2.5)
script = ExtResource("6_u45fp") collision_mask = 0
verts2d = PackedVector2Array(-2.546875, -1.5, 2.546875, -1.5, 2.546875, 1.5, -2.546875, 1.5, -2.546875, -1.5) metadata/func_godot_mesh_data = {
meshInstance3d = NodePath("entity_6_mesh_instance") "uvs": PackedVector2Array(6, -7, 1.8125, -7, 1.8125, -1, 6, -7, 1.8125, -1, 6, -1, -6, -1, -4, -1, -4, -7, -6, -1, -4, -7, -6, -7, -6, -1.8125, -6, -6, -4, -6, -6, -1.8125, -4, -6, -4, -1.8125, 6, -1.8125, 4, -1.8125, 4, -6, 6, -1.8125, 4, -6, 6, -6, 6, -7, 4, -7, 4, -1, 6, -7, 4, -1, 6, -1, -6, -1, -1.8125, -1, -1.8125, -7, -6, -1, -1.8125, -7, -6, -7)
depth = -0.5 }
depth_position_offset = Vector3(-0.25, 0, 0)
extrusion_direction = 1
hole_proximity = 1.0
edge_non_fracture = 0.01
[node name="entity_6_mesh_instance" type="MeshInstance3D" parent="FuncGodotMap/entity_6_func_destructablewall"] [node name="entity_6_mesh_instance" type="MeshInstance3D" parent="FuncGodotMap/entity_6_func_geo"]
mesh = SubResource("ArrayMesh_epu3l")
[node name="entity_7_func_destructablewall" type="Node3D" parent="FuncGodotMap" node_paths=PackedStringArray("meshInstance3d")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 1, -3.7500305)
script = ExtResource("6_u45fp")
verts2d = PackedVector2Array(-1.0000001, -0.7500305, 0.9998779, -0.25006104, 1, -0.24996948, 1, 0.7500305, -1.0000001, 0.7500305, -1.0000001, -0.7500305)
meshInstance3d = NodePath("entity_7_mesh_instance")
depth = -1.0000000596046448
depth_position_offset = Vector3(0, -0.5, 0)
extrusion_direction = 2
hole_proximity = 1.0
edge_non_fracture = 0.01
[node name="entity_7_mesh_instance" type="MeshInstance3D" parent="FuncGodotMap/entity_7_func_destructablewall"]
mesh = SubResource("ArrayMesh_lqn8c") mesh = SubResource("ArrayMesh_lqn8c")
[node name="entity_8_func_destructablewall" type="Node3D" parent="FuncGodotMap" node_paths=PackedStringArray("meshInstance3d")] [node name="entity_6_occluder_instance" type="OccluderInstance3D" parent="FuncGodotMap/entity_6_func_geo"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.546875, 2, 4.015625) occluder = SubResource("ArrayOccluder3D_08uri")
script = ExtResource("6_u45fp")
verts2d = PackedVector2Array(-1.046875, -1.5, 1.046875, -1.5, 1.046875, 1.5, -1.046875, 1.5, -1.046875, -1.5)
meshInstance3d = NodePath("entity_8_mesh_instance")
depth = -0.03125
depth_position_offset = Vector3(0, 0, 0.015625)
hole_proximity = 1.0
edge_non_fracture = 0.01
[node name="entity_8_mesh_instance" type="MeshInstance3D" parent="FuncGodotMap/entity_8_func_destructablewall"] [node name="entity_6_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_6_func_geo"]
mesh = SubResource("ArrayMesh_08uri") shape = SubResource("ConcavePolygonShape3D_fivcu")
[node name="entity_7_func_geo" type="StaticBody3D" parent="FuncGodotMap"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -4.25, 2, 2.546875)
collision_mask = 0
metadata/func_godot_mesh_data = {
"uvs": PackedVector2Array(-8, -7, -9, -7, -9, -1, -8, -7, -9, -1, -8, -1, -10.1875, -1, -1.9984014e-15, -1, -1.9984014e-15, -7, -10.1875, -1, -1.9984014e-15, -7, -10.1875, -7, -10.1875, 9, -10.1875, 8, 0, 8, -10.1875, 9, 0, 8, 0, 9, 10.1875, 9, 0, 9, 0, 8, 10.1875, 9, 0, 8, 10.1875, 8, 10.1875, -7, 1.7763568e-15, -7, 1.7763568e-15, -1, 10.1875, -7, 1.7763568e-15, -1, 10.1875, -1, 8, -1, 9, -1, 9, -7, 8, -1, 9, -7, 8, -7)
}
[node name="entity_7_mesh_instance" type="MeshInstance3D" parent="FuncGodotMap/entity_7_func_geo"]
mesh = SubResource("ArrayMesh_uy2g7")
[node name="entity_7_occluder_instance" type="OccluderInstance3D" parent="FuncGodotMap/entity_7_func_geo"]
occluder = SubResource("ArrayOccluder3D_u1nm5")
[node name="entity_7_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_7_func_geo"]
shape = SubResource("ConcavePolygonShape3D_1w0m8")
[node name="OmniLight3D" type="OmniLight3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -6.6516542, 2.4242716, 0)
light_color = Color(0.68519044, 0.30453056, 0.26691508, 1)
light_energy = 7.369

View File

@@ -14,5 +14,6 @@ script = ExtResource("1_qoi2i")
[node name="CurrentLevel" type="Node3D" parent="."] [node name="CurrentLevel" type="Node3D" parent="."]
[node name="PrototypeLevel" parent="CurrentLevel" instance=ExtResource("1_rtgv3")] [node name="PrototypeLevel" parent="CurrentLevel" instance=ExtResource("1_rtgv3")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0066280365, -0.0119102, 0.014269352)
[node name="UserInterface" parent="." instance=ExtResource("2_mgb3u")] [node name="UserInterface" parent="." instance=ExtResource("2_mgb3u")]

View File

@@ -5,6 +5,9 @@
[resource] [resource]
script = ExtResource("1_1gpns") script = ExtResource("1_1gpns")
add_textures_metadata = true
add_vertex_metadata = true
add_face_normal_metadata = true
script_class = ExtResource("2_7nwkm") script_class = ExtResource("2_7nwkm")
classname = "func_destructablewall" classname = "func_destructablewall"
description = "Set the brush entity as a destructable. description = "Set the brush entity as a destructable.

View File

@@ -1,176 +1,130 @@
// Game: demo // Game: demo
// Format: Valve // Format: Valve
// entity 0 // entity 0
{ {
"mapversion" "220" "mapversion" "220"
"wad" "" "wad" ""
"classname" "worldspawn" "classname" "worldspawn"
"_tb_mod" "trenchbroom" "_tb_mod" "trenchbroom"
} // brush 0
// entity 1 {
{ ( -176 -64 -16 ) ( -176 -63 -16 ) ( -176 -64 -15 ) tile013 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 180 1 1
"classname" "func_group" ( -64 -224 -16 ) ( -64 -224 -15 ) ( -63 -224 -16 ) tile013 [ 1 0 0 0 ] [ 0 0 -1 0 ] 180 1 1
"_tb_type" "_tb_group" ( -64 -64 -16 ) ( -63 -64 -16 ) ( -64 -63 -16 ) tile013 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
"_tb_name" "floor" ( 64 64 16 ) ( 64 65 16 ) ( 65 64 16 ) tile013 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
"_tb_id" "1" ( 64 224 16 ) ( 65 224 16 ) ( 64 224 17 ) tile013 [ -1 0 0 0 ] [ 0 0 -1 0 ] 180 1 1
"_tb_linked_group_id" "{fbbc3a97-f5d3-443e-97e2-242861ee6c78}" ( 192 64 16 ) ( 192 64 17 ) ( 192 65 16 ) tile013 [ 0 1 0 0 ] [ 0 0 -1 0 ] 180 1 1
"_tb_transformation" "1 0 0 -144 0 1 0 -144 0 0 1 0 0 0 0 1" }
// brush 0 }
{ // entity 1
( 272 -512 -16 ) ( 272 -510 -16 ) ( 272 -512 -15 ) tile191 [ 0 -0.5 0 0 ] [ 0 0 -1 0 ] 0 1 1 {
( 272 -512 -16 ) ( 272 -512 -15 ) ( 274.125 -512 -16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 "classname" "func_movingplatform"
( 272 -512 -16 ) ( 274.125 -512 -16 ) ( 272 -510 -16 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 0 1 1 "move_distance" "2"
( 544 -256 16 ) ( 544 -254 16 ) ( 546.125 -256 16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 0 1 1 "move_time" "2"
( 544 -256 16 ) ( 546.125 -256 16 ) ( 544 -256 17 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 "move_direction" "0.0 1.0 0.0"
( 544 -256 16 ) ( 544 -256 17 ) ( 544 -254 16 ) tile191 [ 0 0.5 0 0 ] [ 0 0 -1 0 ] 0 1 1 // brush 0
} {
// brush 1 ( 272 -64 -16 ) ( 272 -63 -16 ) ( 272 -64 -15 ) tile002 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
{ ( 384 -224 -16 ) ( 384 -224 -15 ) ( 385 -224 -16 ) tile002 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 0 -512 -16 ) ( 0 -510 -16 ) ( 0 -512 -15 ) tile191 [ 0 -0.5 0 0 ] [ 0 0 -1 0 ] 0 1 1 ( 384 -64 -16 ) ( 385 -64 -16 ) ( 384 -63 -16 ) tile002 [ -1 0 0 0 ] [ 0 -1 0 0 ] 180 1 1
( 0 -512 -16 ) ( 0 -512 -15 ) ( 2.125 -512 -16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 ( 512 64 16 ) ( 512 65 16 ) ( 513 64 16 ) tile002 [ 1 0 0 0 ] [ 0 -1 0 0 ] 180 1 1
( 0 -512 -16 ) ( 2.125 -512 -16 ) ( 0 -510 -16 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 0 1 1 ( 512 224 16 ) ( 513 224 16 ) ( 512 224 17 ) tile002 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 272 -256 16 ) ( 272 -254 16 ) ( 274.125 -256 16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 0 1 1 ( 640 64 16 ) ( 640 64 17 ) ( 640 65 16 ) tile002 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 272 -256 16 ) ( 274.125 -256 16 ) ( 272 -256 17 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 }
( 272 -256 16 ) ( 272 -256 17 ) ( 272 -254 16 ) tile191 [ 0 0.5 0 0 ] [ 0 0 -1 0 ] 0 1 1 }
} // entity 2
// brush 2 {
{ "classname" "func_destructablewall"
( -272 -512 -16 ) ( -272 -510 -16 ) ( -272 -512 -15 ) tile191 [ 0 -0.5 0 0 ] [ 0 0 -1 0 ] 90 1 1 // brush 0
( -272 -512 -16 ) ( -272 -512 -15 ) ( -269.875 -512 -16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 90 1 1 {
( -272 -512 -16 ) ( -269.875 -512 -16 ) ( -272 -510 -16 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 90 1 1 ( 64 0 32 ) ( 64 0 33 ) ( 64 -1 32 ) tile043 [ 0 1 0 0 ] [ 0 0 -1 0 ] 270 1 1
( 0 -256 16 ) ( 0 -254 16 ) ( 2.125 -256 16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 90 1 1 ( 0 -48 32 ) ( -1 -48 32 ) ( 0 -48 33 ) tile043 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 0 -256 16 ) ( 2.125 -256 16 ) ( 0 -256 17 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 90 1 1 ( 80 80 16 ) ( 79 80 16 ) ( 80 79 16 ) tile043 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 0 -256 16 ) ( 0 -256 17 ) ( 0 -254 16 ) tile191 [ 0 0.5 0 0 ] [ 0 0 -1 0 ] 90 1 1 ( 0 0 112 ) ( 0 -1 112 ) ( -1 0 112 ) tile043 [ 1 0 0 0 ] [ 0 -1 0 0 ] 270 1 1
} ( 80 16 16 ) ( 80 16 17 ) ( 79 16 16 ) tile043 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
// brush 3 ( 96 80 16 ) ( 96 79 16 ) ( 96 80 17 ) tile043 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
{ }
( -544 -512 -16 ) ( -544 -510 -16 ) ( -544 -512 -15 ) tile191 [ 0 -0.5 0 0 ] [ 0 0 -1 0 ] 90 1 1 }
( -544 -512 -16 ) ( -544 -512 -15 ) ( -541.875 -512 -16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 90 1 1 // entity 3
( -544 -512 -16 ) ( -541.875 -512 -16 ) ( -544 -510 -16 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 90 1 1 {
( -272 -256 16 ) ( -272 -254 16 ) ( -269.875 -256 16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 90 1 1 "classname" "func_destructablewall"
( -272 -256 16 ) ( -269.875 -256 16 ) ( -272 -256 17 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 90 1 1 "extrude_direction" "1"
( -272 -256 16 ) ( -272 -256 17 ) ( -272 -254 16 ) tile191 [ 0 0.5 0 0 ] [ 0 0 -1 0 ] 90 1 1 // brush 0
} {
// brush 4 ( -176 -96 16 ) ( -176 -96 17 ) ( -176 -97 16 ) tile000 [ 0 -1 0 0 ] [ -0 -0 -1 0 ] 0 1 1
{ ( -64 -144 32 ) ( -64 -144 33 ) ( -63 -144 32 ) "Stone Base/albedo" [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -544 -256 -16 ) ( -544 -254 -16 ) ( -544 -256 -15 ) tile191 [ 0 -0.5 0 0 ] [ 0 0 -1 0 ] 270 1 1 ( -144 -96 16 ) ( -144 -97 16 ) ( -143 -96 16 ) tile000 [ -1 0 0 0 ] [ -0 -1 -0 0 ] 0 1 1
( -544 -256 -16 ) ( -544 -256 -15 ) ( -541.875 -256 -16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 270 1 1 ( -64 -176 112 ) ( -63 -176 112 ) ( -64 -177 112 ) tile000 [ 1 -0 0 0 ] [ -0 -1 0 0 ] 0 1 1
( -544 -256 -16 ) ( -541.875 -256 -16 ) ( -544 -254 -16 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 270 1 1 ( -144 -128 16 ) ( -143 -128 16 ) ( -144 -128 17 ) tile000 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -272 0 16 ) ( -272 2 16 ) ( -269.875 0 16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 270 1 1 ( -13 -176 32 ) ( -13 -177 32 ) ( -13 -176 33 ) tile000 [ -0 1 0 0 ] [ -0 0 -1 0 ] 0 1 1
( -272 0 16 ) ( -269.875 0 16 ) ( -272 0 17 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 270 1 1 }
( -272 0 16 ) ( -272 0 17 ) ( -272 2 16 ) tile191 [ 0 0.5 0 0 ] [ 0 0 -1 0 ] 270 1 1 }
} // entity 4
// brush 5 {
{ "classname" "func_destructablewall"
( -272 -256 -16 ) ( -272 -254 -16 ) ( -272 -256 -15 ) tile191 [ 0 -0.5 0 0 ] [ 0 0 -1 0 ] 270 1 1 "extrude_direction" "2"
( -272 -256 -16 ) ( -272 -256 -15 ) ( -269.875 -256 -16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 270 1 1 // brush 0
( -272 -256 -16 ) ( -269.875 -256 -16 ) ( -272 -254 -16 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 270 1 1 {
( 0 0 16 ) ( 0 2 16 ) ( 2.125 0 16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 270 1 1 ( -208 320 32 ) ( -208 320 33 ) ( -208 319 32 ) tile043 [ 0 1 0 0 ] [ 0 0 -1 0 ] 270 1 1
( 0 0 16 ) ( 2.125 0 16 ) ( 0 0 17 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 270 1 1 ( -160 269 32 ) ( -161 269 32 ) ( -160 269 33 ) tile043 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 0 0 16 ) ( 0 0 17 ) ( 0 2 16 ) tile191 [ 0 0.5 0 0 ] [ 0 0 -1 0 ] 270 1 1 ( -80 400 16 ) ( -81 400 16 ) ( -80 399 16 ) tile043 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
} ( -160 320 32 ) ( -160 319 32 ) ( -161 320 32 ) tile043 [ 1 0 0 0 ] [ 0 -1 0 0 ] 270 1 1
// brush 6 ( -80 368 16 ) ( -80 368 17 ) ( -81 368 16 ) tile043 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
{ ( -80 400 16 ) ( -80 399 16 ) ( -80 400 17 ) tile043 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 0 -256 -16 ) ( 0 -254 -16 ) ( 0 -256 -15 ) tile191 [ 0 -0.5 0 0 ] [ 0 0 -1 0 ] 180 1 1 }
( 0 -256 -16 ) ( 0 -256 -15 ) ( 2.125 -256 -16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 180 1 1 }
( 0 -256 -16 ) ( 2.125 -256 -16 ) ( 0 -254 -16 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 180 1 1 // entity 5
( 272 0 16 ) ( 272 2 16 ) ( 274.125 0 16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 180 1 1 {
( 272 0 16 ) ( 274.125 0 16 ) ( 272 0 17 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 180 1 1 "classname" "func_destructablewall"
( 272 0 16 ) ( 272 0 17 ) ( 272 2 16 ) tile191 [ 0 0.5 0 0 ] [ 0 0 -1 0 ] 180 1 1 // brush 0
} {
// brush 7 ( 64 80 32 ) ( 64 80 33 ) ( 64 79 32 ) tile043 [ 0 1 0 0 ] [ 0 0 -1 0 ] 270 1 1
{ ( 0 29 32 ) ( -1 29 32 ) ( 0 29 33 ) tile043 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 272 -256 -16 ) ( 272 -254 -16 ) ( 272 -256 -15 ) tile191 [ 0 -0.5 0 0 ] [ 0 0 -1 0 ] 180 1 1 ( 80 160 16 ) ( 79 160 16 ) ( 80 159 16 ) tile043 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 272 -256 -16 ) ( 272 -256 -15 ) ( 274.125 -256 -16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 180 1 1 ( 0 80 112 ) ( 0 79 112 ) ( -1 80 112 ) tile043 [ 1 0 0 0 ] [ 0 -1 0 0 ] 270 1 1
( 272 -256 -16 ) ( 274.125 -256 -16 ) ( 272 -254 -16 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 180 1 1 ( 80 96 16 ) ( 80 96 17 ) ( 79 96 16 ) tile043 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 544 0 16 ) ( 544 2 16 ) ( 546.125 0 16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 180 1 1 ( 96 160 16 ) ( 96 159 16 ) ( 96 160 17 ) tile043 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 544 0 16 ) ( 546.125 0 16 ) ( 544 0 17 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 180 1 1 }
( 544 0 16 ) ( 544 0 17 ) ( 544 2 16 ) tile191 [ 0 0.5 0 0 ] [ 0 0 -1 0 ] 180 1 1 }
} // entity 6
// brush 8 {
{ "classname" "func_destructablewall"
( 0 0 -16 ) ( 0 2 -16 ) ( 0 0 -15 ) tile191 [ 0 -0.5 0 0 ] [ 0 0 -1 0 ] 270 1 1 "extrude_direction" "1"
( 0 0 -16 ) ( 0 0 -15 ) ( 2.125 0 -16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 270 1 1 // brush 0
( 0 0 -16 ) ( 2.125 0 -16 ) ( 0 2 -16 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 270 1 1 {
( 272 256 16 ) ( 272 258 16 ) ( 274.125 256 16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 270 1 1 ( 0 -80 16 ) ( 0 -80 17 ) ( 0 -81 16 ) tile043 [ 2.220446049250313e-16 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 272 256 16 ) ( 274.125 256 16 ) ( 272 256 17 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 270 1 1 ( 112 -128 32 ) ( 112 -128 33 ) ( 113 -128 32 ) tile043 [ -1 2.220446049250313e-16 0 0 ] [ 0 0 -1 0 ] 270 1 1
( 272 256 16 ) ( 272 256 17 ) ( 272 258 16 ) tile191 [ 0 0.5 0 0 ] [ 0 0 -1 0 ] 270 1 1 ( 32 -80 16 ) ( 32 -81 16 ) ( 33 -80 16 ) tile043 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
} ( 112 -160 112 ) ( 113 -160 112 ) ( 112 -161 112 ) tile043 [ 1 0 0 0 ] [ 0 -1 0 0 ] 270 1 1
// brush 9 ( 32 -112 16 ) ( 33 -112 16 ) ( 32 -112 17 ) tile043 [ 1 -2.220446049250313e-16 0 0 ] [ 0 0 -1 0 ] 0 1 1
{ ( 163 -160 32 ) ( 163 -161 32 ) ( 163 -160 33 ) tile043 [ -2.220446049250313e-16 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -272 0 -16 ) ( -272 2 -16 ) ( -272 0 -15 ) tile191 [ 0 -0.5 0 0 ] [ 0 0 -1 0 ] 270 1 1 }
( -272 0 -16 ) ( -272 0 -15 ) ( -269.875 0 -16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 270 1 1 }
( -272 0 -16 ) ( -269.875 0 -16 ) ( -272 2 -16 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 270 1 1 // entity 7
( 0 256 16 ) ( 0 258 16 ) ( 2.125 256 16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 270 1 1 {
( 0 256 16 ) ( 2.125 256 16 ) ( 0 256 17 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 270 1 1 "classname" "func_destructablewall"
( 0 256 16 ) ( 0 256 17 ) ( 0 258 16 ) tile191 [ 0 0.5 0 0 ] [ 0 0 -1 0 ] 270 1 1 "extrude_direction" "2"
} // brush 0
// brush 10 {
{ ( -144 64 48 ) ( -144 64 16 ) ( -128 128 16 ) tile043 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -544 0 -16 ) ( -544 2 -16 ) ( -544 0 -15 ) tile191 [ 0 -0.5 0 0 ] [ 0 0 -1 0 ] 270 1 1 ( -128 128 16 ) ( -96 128 48 ) ( -144 64 48 ) tile043 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -544 0 -16 ) ( -544 0 -15 ) ( -541.875 0 -16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 270 1 1 ( -144 64 48 ) ( -96 64 48 ) ( -96 64 16 ) tile043 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -544 0 -16 ) ( -541.875 0 -16 ) ( -544 2 -16 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 270 1 1 ( -96 64 16 ) ( -96 128 16 ) ( -128 128 16 ) tile043 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( -272 256 16 ) ( -272 258 16 ) ( -269.875 256 16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 270 1 1 ( -144 64 48 ) ( -96 128 48 ) ( -96 64 48 ) tile043 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( -272 256 16 ) ( -269.875 256 16 ) ( -272 256 17 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 270 1 1 ( -96 128 16 ) ( -96 128 48 ) ( -128 128 16 ) tile043 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -272 256 16 ) ( -272 256 17 ) ( -272 258 16 ) tile191 [ 0 0.5 0 0 ] [ 0 0 -1 0 ] 270 1 1 ( -96 64 48 ) ( -96 128 48 ) ( -96 128 16 ) tile043 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
} }
// brush 11 }
{ // entity 8
( 272 0 -16 ) ( 272 2 -16 ) ( 272 0 -15 ) tile191 [ 0 -0.5 0 0 ] [ 0 0 -1 0 ] 270 1 1 {
( 272 0 -16 ) ( 272 0 -15 ) ( 274.125 0 -16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 270 1 1 "classname" "func_destructablewall"
( 272 0 -16 ) ( 274.125 0 -16 ) ( 272 2 -16 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 270 1 1 // brush 0
( 544 256 16 ) ( 544 258 16 ) ( 546.125 256 16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 270 1 1 {
( 544 256 16 ) ( 546.125 256 16 ) ( 544 256 17 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 270 1 1 ( 128 0 32 ) ( 128 0 33 ) ( 128 -1 32 ) tile043 [ 0 1 0 0 ] [ 0 0 -1 0 ] 270 1 1
( 544 256 16 ) ( 544 256 17 ) ( 544 258 16 ) tile191 [ 0 0.5 0 0 ] [ 0 0 -1 0 ] 270 1 1 ( 64 -51 32 ) ( 63 -51 32 ) ( 64 -51 33 ) tile043 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
} ( 144 80 16 ) ( 143 80 16 ) ( 144 79 16 ) tile043 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
// brush 12 ( 64 0 112 ) ( 64 -1 112 ) ( 63 0 112 ) tile043 [ 1 0 0 0 ] [ 0 -1 0 0 ] 270 1 1
{ ( 144 16 16 ) ( 144 16 17 ) ( 143 16 16 ) tile043 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 272 256 -16 ) ( 272 258 -16 ) ( 272 256 -15 ) tile191 [ 0 -0.5 0 0 ] [ 0 0 -1 0 ] 90 1 1 ( 129 80 16 ) ( 129 79 16 ) ( 129 80 17 ) tile043 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 272 256 -16 ) ( 272 256 -15 ) ( 274.125 256 -16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 90 1 1 }
( 272 256 -16 ) ( 274.125 256 -16 ) ( 272 258 -16 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 90 1 1 }
( 544 512 16 ) ( 544 514 16 ) ( 546.125 512 16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 90 1 1
( 544 512 16 ) ( 546.125 512 16 ) ( 544 512 17 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 90 1 1
( 544 512 16 ) ( 544 512 17 ) ( 544 514 16 ) tile191 [ 0 0.5 0 0 ] [ 0 0 -1 0 ] 90 1 1
}
// brush 13
{
( 0 256 -16 ) ( 0 258 -16 ) ( 0 256 -15 ) tile191 [ 0 -0.5 0 0 ] [ 0 0 -1 0 ] 90 1 1
( 0 256 -16 ) ( 0 256 -15 ) ( 2.125 256 -16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 90 1 1
( 0 256 -16 ) ( 2.125 256 -16 ) ( 0 258 -16 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 90 1 1
( 272 512 16 ) ( 272 514 16 ) ( 274.125 512 16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 90 1 1
( 272 512 16 ) ( 274.125 512 16 ) ( 272 512 17 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 90 1 1
( 272 512 16 ) ( 272 512 17 ) ( 272 514 16 ) tile191 [ 0 0.5 0 0 ] [ 0 0 -1 0 ] 90 1 1
}
// brush 14
{
( -272 256 -16 ) ( -272 258 -16 ) ( -272 256 -15 ) tile191 [ 0 -0.5 0 0 ] [ 0 0 -1 0 ] 90 1 1
( -272 256 -16 ) ( -272 256 -15 ) ( -269.875 256 -16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 90 1 1
( -272 256 -16 ) ( -269.875 256 -16 ) ( -272 258 -16 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 90 1 1
( 0 512 16 ) ( 0 514 16 ) ( 2.125 512 16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 90 1 1
( 0 512 16 ) ( 2.125 512 16 ) ( 0 512 17 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 90 1 1
( 0 512 16 ) ( 0 512 17 ) ( 0 514 16 ) tile191 [ 0 0.5 0 0 ] [ 0 0 -1 0 ] 90 1 1
}
// brush 15
{
( -544 256 -16 ) ( -544 258 -16 ) ( -544 256 -15 ) tile191 [ 0 -0.5 0 0 ] [ 0 0 -1 0 ] 90 1 1
( -544 256 -16 ) ( -544 256 -15 ) ( -541.875 256 -16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 90 1 1
( -544 256 -16 ) ( -541.875 256 -16 ) ( -544 258 -16 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 90 1 1
( -272 512 16 ) ( -272 514 16 ) ( -269.875 512 16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 90 1 1
( -272 512 16 ) ( -269.875 512 16 ) ( -272 512 17 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 90 1 1
( -272 512 16 ) ( -272 512 17 ) ( -272 514 16 ) tile191 [ 0 0.5 0 0 ] [ 0 0 -1 0 ] 90 1 1
}
}
// entity 2
{
"classname" "func_destructable"
"_tb_group" "1"
// brush 0
{
( 96 -144 -16 ) ( 96 -142 -16 ) ( 96 -144 -15 ) tile017 [ 0 -0.5 0 -8 ] [ 0 0 -1 0 ] 270 1 1
( 96 -144 -16 ) ( 96 -144 -15 ) ( 98.125 -144 -16 ) tile017 [ 0.47058823529411775 0 0 -13.176468 ] [ 0 0 -1 0 ] 270 1 1
( 96 -144 48 ) ( 98.125 -144 48 ) ( 96 -142 48 ) tile017 [ -0.47058823529411775 0 0 13.176468 ] [ 0 -0.5 0 -8 ] 180 1 1
( 368 112 144 ) ( 368 114 144 ) ( 370.125 112 144 ) tile017 [ 0.47058823529411775 0 0 -13.176468 ] [ 0 -0.5 0 -8 ] 90 1 1
( 368 112 16 ) ( 370.125 112 16 ) ( 368 112 17 ) tile017 [ -0.47058823529411775 0 0 13.176468 ] [ 0 0 -1 0 ] 270 1 1
( 112 112 16 ) ( 112 112 17 ) ( 112 114 16 ) tile017 [ 0 0.5 0 8 ] [ 0 0 -1 0 ] 90 1 1
}
}

View File

@@ -1,153 +1,130 @@
// Game: demo // Game: demo
// Format: Valve // Format: Valve
// entity 0 // entity 0
{ {
"mapversion" "220" "mapversion" "220"
"wad" "" "wad" ""
"classname" "worldspawn" "classname" "worldspawn"
"_tb_mod" "trenchbroom" "_tb_mod" "trenchbroom"
// brush 0 // brush 0
{ {
( 272 -512 -16 ) ( 272 -510 -16 ) ( 272 -512 -15 ) tile191 [ 0 -0.5 0 0 ] [ 0 0 -1 0 ] 0 1 1 ( -176 -64 -16 ) ( -176 -63 -16 ) ( -176 -64 -15 ) tile013 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 180 1 1
( 272 -512 -16 ) ( 272 -512 -15 ) ( 274.125 -512 -16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 ( -64 -224 -16 ) ( -64 -224 -15 ) ( -63 -224 -16 ) tile013 [ 1 0 0 0 ] [ 0 0 -1 0 ] 180 1 1
( 272 -512 -16 ) ( 274.125 -512 -16 ) ( 272 -510 -16 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 0 1 1 ( -64 -64 -16 ) ( -63 -64 -16 ) ( -64 -63 -16 ) tile013 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 544 -256 16 ) ( 544 -254 16 ) ( 546.125 -256 16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 0 1 1 ( 64 64 16 ) ( 64 65 16 ) ( 65 64 16 ) tile013 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 544 -256 16 ) ( 546.125 -256 16 ) ( 544 -256 17 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 ( 64 224 16 ) ( 65 224 16 ) ( 64 224 17 ) tile013 [ -1 0 0 0 ] [ 0 0 -1 0 ] 180 1 1
( 544 -256 16 ) ( 544 -256 17 ) ( 544 -254 16 ) tile191 [ 0 0.5 0 0 ] [ 0 0 -1 0 ] 0 1 1 ( 192 64 16 ) ( 192 64 17 ) ( 192 65 16 ) tile013 [ 0 1 0 0 ] [ 0 0 -1 0 ] 180 1 1
} }
// brush 1 }
{ // entity 1
( 0 -512 -16 ) ( 0 -510 -16 ) ( 0 -512 -15 ) tile191 [ 0 -0.5 0 0 ] [ 0 0 -1 0 ] 0 1 1 {
( 0 -512 -16 ) ( 0 -512 -15 ) ( 2.125 -512 -16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 "classname" "func_movingplatform"
( 0 -512 -16 ) ( 2.125 -512 -16 ) ( 0 -510 -16 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 0 1 1 "move_distance" "2"
( 272 -256 16 ) ( 272 -254 16 ) ( 274.125 -256 16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 0 1 1 "move_time" "2"
( 272 -256 16 ) ( 274.125 -256 16 ) ( 272 -256 17 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 "move_direction" "0.0 1.0 0.0"
( 272 -256 16 ) ( 272 -256 17 ) ( 272 -254 16 ) tile191 [ 0 0.5 0 0 ] [ 0 0 -1 0 ] 0 1 1 // brush 0
} {
// brush 2 ( 272 -64 -16 ) ( 272 -63 -16 ) ( 272 -64 -15 ) tile002 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
{ ( 384 -224 -16 ) ( 384 -224 -15 ) ( 385 -224 -16 ) tile002 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -272 -512 -16 ) ( -272 -510 -16 ) ( -272 -512 -15 ) tile191 [ 0 -0.5 0 0 ] [ 0 0 -1 0 ] 90 1 1 ( 384 -64 -16 ) ( 385 -64 -16 ) ( 384 -63 -16 ) tile002 [ -1 0 0 0 ] [ 0 -1 0 0 ] 180 1 1
( -272 -512 -16 ) ( -272 -512 -15 ) ( -269.875 -512 -16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 90 1 1 ( 512 64 16 ) ( 512 65 16 ) ( 513 64 16 ) tile002 [ 1 0 0 0 ] [ 0 -1 0 0 ] 180 1 1
( -272 -512 -16 ) ( -269.875 -512 -16 ) ( -272 -510 -16 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 90 1 1 ( 512 224 16 ) ( 513 224 16 ) ( 512 224 17 ) tile002 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 0 -256 16 ) ( 0 -254 16 ) ( 2.125 -256 16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 90 1 1 ( 640 64 16 ) ( 640 64 17 ) ( 640 65 16 ) tile002 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 0 -256 16 ) ( 2.125 -256 16 ) ( 0 -256 17 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 90 1 1 }
( 0 -256 16 ) ( 0 -256 17 ) ( 0 -254 16 ) tile191 [ 0 0.5 0 0 ] [ 0 0 -1 0 ] 90 1 1 }
} // entity 2
// brush 3 {
{ "classname" "func_destructablewall"
( -544 -512 -16 ) ( -544 -510 -16 ) ( -544 -512 -15 ) tile191 [ 0 -0.5 0 0 ] [ 0 0 -1 0 ] 90 1 1 // brush 0
( -544 -512 -16 ) ( -544 -512 -15 ) ( -541.875 -512 -16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 90 1 1 {
( -544 -512 -16 ) ( -541.875 -512 -16 ) ( -544 -510 -16 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 90 1 1 ( 64 0 32 ) ( 64 0 33 ) ( 64 -1 32 ) tile043 [ 0 1 0 0 ] [ 0 0 -1 0 ] 270 1 1
( -272 -256 16 ) ( -272 -254 16 ) ( -269.875 -256 16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 90 1 1 ( 0 -48 32 ) ( -1 -48 32 ) ( 0 -48 33 ) tile043 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -272 -256 16 ) ( -269.875 -256 16 ) ( -272 -256 17 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 90 1 1 ( 80 80 16 ) ( 79 80 16 ) ( 80 79 16 ) tile043 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( -272 -256 16 ) ( -272 -256 17 ) ( -272 -254 16 ) tile191 [ 0 0.5 0 0 ] [ 0 0 -1 0 ] 90 1 1 ( 0 0 112 ) ( 0 -1 112 ) ( -1 0 112 ) tile043 [ 1 0 0 0 ] [ 0 -1 0 0 ] 270 1 1
} ( 80 16 16 ) ( 80 16 17 ) ( 79 16 16 ) tile043 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
// brush 4 ( 96 80 16 ) ( 96 79 16 ) ( 96 80 17 ) tile043 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
{ }
( -544 -256 -16 ) ( -544 -254 -16 ) ( -544 -256 -15 ) tile191 [ 0 -0.5 0 0 ] [ 0 0 -1 0 ] 270 1 1 }
( -544 -256 -16 ) ( -544 -256 -15 ) ( -541.875 -256 -16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 270 1 1 // entity 3
( -544 -256 -16 ) ( -541.875 -256 -16 ) ( -544 -254 -16 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 270 1 1 {
( -272 0 16 ) ( -272 2 16 ) ( -269.875 0 16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 270 1 1 "classname" "func_destructablewall"
( -272 0 16 ) ( -269.875 0 16 ) ( -272 0 17 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 270 1 1 "extrude_direction" "1"
( -272 0 16 ) ( -272 0 17 ) ( -272 2 16 ) tile191 [ 0 0.5 0 0 ] [ 0 0 -1 0 ] 270 1 1 // brush 0
} {
// brush 5 ( -176 -96 16 ) ( -176 -96 17 ) ( -176 -97 16 ) "Stone Base/albedo" [ 0 -1 0 0 ] [ -0 -0 -1 0 ] 0 1 1
{ ( -64 -144 32 ) ( -64 -144 33 ) ( -63 -144 32 ) "Stone Base/albedo" [ 1 0 0 0 ] [ 0 0 -1 320 ] 0 0.05 0.05
( -272 -256 -16 ) ( -272 -254 -16 ) ( -272 -256 -15 ) tile191 [ 0 -0.5 0 0 ] [ 0 0 -1 0 ] 270 1 1 ( -144 -96 16 ) ( -144 -97 16 ) ( -143 -96 16 ) "Stone Base/albedo" [ -1 0 0 0 ] [ -0 -1 -0 0 ] 0 1 1
( -272 -256 -16 ) ( -272 -256 -15 ) ( -269.875 -256 -16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 270 1 1 ( -64 -176 112 ) ( -63 -176 112 ) ( -64 -177 112 ) "Stone Base/albedo" [ 1 -0 0 0 ] [ -0 -1 0 0 ] 0 1 1
( -272 -256 -16 ) ( -269.875 -256 -16 ) ( -272 -254 -16 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 270 1 1 ( -144 -128 16 ) ( -143 -128 16 ) ( -144 -128 17 ) "Stone Base/albedo" [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 0 0 16 ) ( 0 2 16 ) ( 2.125 0 16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 270 1 1 ( -13 -176 32 ) ( -13 -177 32 ) ( -13 -176 33 ) "Stone Base/albedo" [ -0 1 0 0 ] [ -0 0 -1 0 ] 0 1 1
( 0 0 16 ) ( 2.125 0 16 ) ( 0 0 17 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 270 1 1 }
( 0 0 16 ) ( 0 0 17 ) ( 0 2 16 ) tile191 [ 0 0.5 0 0 ] [ 0 0 -1 0 ] 270 1 1 }
} // entity 4
// brush 6 {
{ "classname" "func_destructablewall"
( 0 -256 -16 ) ( 0 -254 -16 ) ( 0 -256 -15 ) tile191 [ 0 -0.5 0 0 ] [ 0 0 -1 0 ] 180 1 1 "extrude_direction" "2"
( 0 -256 -16 ) ( 0 -256 -15 ) ( 2.125 -256 -16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 180 1 1 // brush 0
( 0 -256 -16 ) ( 2.125 -256 -16 ) ( 0 -254 -16 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 180 1 1 {
( 272 0 16 ) ( 272 2 16 ) ( 274.125 0 16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 180 1 1 ( -208 320 32 ) ( -208 320 33 ) ( -208 319 32 ) tile043 [ 0 1 0 0 ] [ 0 0 -1 0 ] 270 1 1
( 272 0 16 ) ( 274.125 0 16 ) ( 272 0 17 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 180 1 1 ( -160 269 32 ) ( -161 269 32 ) ( -160 269 33 ) tile043 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 272 0 16 ) ( 272 0 17 ) ( 272 2 16 ) tile191 [ 0 0.5 0 0 ] [ 0 0 -1 0 ] 180 1 1 ( -80 400 16 ) ( -81 400 16 ) ( -80 399 16 ) tile043 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
} ( -160 320 32 ) ( -160 319 32 ) ( -161 320 32 ) tile043 [ 1 0 0 0 ] [ 0 -1 0 0 ] 270 1 1
// brush 7 ( -80 368 16 ) ( -80 368 17 ) ( -81 368 16 ) tile043 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
{ ( -80 400 16 ) ( -80 399 16 ) ( -80 400 17 ) tile043 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 272 -256 -16 ) ( 272 -254 -16 ) ( 272 -256 -15 ) tile191 [ 0 -0.5 0 0 ] [ 0 0 -1 0 ] 180 1 1 }
( 272 -256 -16 ) ( 272 -256 -15 ) ( 274.125 -256 -16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 180 1 1 }
( 272 -256 -16 ) ( 274.125 -256 -16 ) ( 272 -254 -16 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 180 1 1 // entity 5
( 544 0 16 ) ( 544 2 16 ) ( 546.125 0 16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 180 1 1 {
( 544 0 16 ) ( 546.125 0 16 ) ( 544 0 17 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 180 1 1 "classname" "func_destructablewall"
( 544 0 16 ) ( 544 0 17 ) ( 544 2 16 ) tile191 [ 0 0.5 0 0 ] [ 0 0 -1 0 ] 180 1 1 // brush 0
} {
// brush 8 ( 64 80 32 ) ( 64 80 33 ) ( 64 79 32 ) tile043 [ 0 1 0 0 ] [ 0 0 -1 0 ] 270 1 1
{ ( 0 29 32 ) ( -1 29 32 ) ( 0 29 33 ) tile043 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 0 0 -16 ) ( 0 2 -16 ) ( 0 0 -15 ) tile191 [ 0 -0.5 0 0 ] [ 0 0 -1 0 ] 270 1 1 ( 80 160 16 ) ( 79 160 16 ) ( 80 159 16 ) tile043 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 0 0 -16 ) ( 0 0 -15 ) ( 2.125 0 -16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 270 1 1 ( 0 80 112 ) ( 0 79 112 ) ( -1 80 112 ) tile043 [ 1 0 0 0 ] [ 0 -1 0 0 ] 270 1 1
( 0 0 -16 ) ( 2.125 0 -16 ) ( 0 2 -16 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 270 1 1 ( 80 96 16 ) ( 80 96 17 ) ( 79 96 16 ) tile043 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 272 256 16 ) ( 272 258 16 ) ( 274.125 256 16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 270 1 1 ( 96 160 16 ) ( 96 159 16 ) ( 96 160 17 ) tile043 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 272 256 16 ) ( 274.125 256 16 ) ( 272 256 17 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 270 1 1 }
( 272 256 16 ) ( 272 256 17 ) ( 272 258 16 ) tile191 [ 0 0.5 0 0 ] [ 0 0 -1 0 ] 270 1 1 }
} // entity 6
// brush 9 {
{ "classname" "func_destructablewall"
( -272 0 -16 ) ( -272 2 -16 ) ( -272 0 -15 ) tile191 [ 0 -0.5 0 0 ] [ 0 0 -1 0 ] 270 1 1 "extrude_direction" "1"
( -272 0 -16 ) ( -272 0 -15 ) ( -269.875 0 -16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 270 1 1 // brush 0
( -272 0 -16 ) ( -269.875 0 -16 ) ( -272 2 -16 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 270 1 1 {
( 0 256 16 ) ( 0 258 16 ) ( 2.125 256 16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 270 1 1 ( 0 -80 16 ) ( 0 -80 17 ) ( 0 -81 16 ) tile043 [ 2.220446049250313e-16 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 0 256 16 ) ( 2.125 256 16 ) ( 0 256 17 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 270 1 1 ( 112 -128 32 ) ( 112 -128 33 ) ( 113 -128 32 ) tile043 [ -1 2.220446049250313e-16 0 0 ] [ 0 0 -1 0 ] 270 1 1
( 0 256 16 ) ( 0 256 17 ) ( 0 258 16 ) tile191 [ 0 0.5 0 0 ] [ 0 0 -1 0 ] 270 1 1 ( 32 -80 16 ) ( 32 -81 16 ) ( 33 -80 16 ) tile043 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
} ( 112 -160 112 ) ( 113 -160 112 ) ( 112 -161 112 ) tile043 [ 1 0 0 0 ] [ 0 -1 0 0 ] 270 1 1
// brush 10 ( 32 -112 16 ) ( 33 -112 16 ) ( 32 -112 17 ) tile043 [ 1 -2.220446049250313e-16 0 0 ] [ 0 0 -1 0 ] 0 1 1
{ ( 163 -160 32 ) ( 163 -161 32 ) ( 163 -160 33 ) tile043 [ -2.220446049250313e-16 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -544 0 -16 ) ( -544 2 -16 ) ( -544 0 -15 ) tile191 [ 0 -0.5 0 0 ] [ 0 0 -1 0 ] 270 1 1 }
( -544 0 -16 ) ( -544 0 -15 ) ( -541.875 0 -16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 270 1 1 }
( -544 0 -16 ) ( -541.875 0 -16 ) ( -544 2 -16 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 270 1 1 // entity 7
( -272 256 16 ) ( -272 258 16 ) ( -269.875 256 16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 270 1 1 {
( -272 256 16 ) ( -269.875 256 16 ) ( -272 256 17 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 270 1 1 "classname" "func_destructablewall"
( -272 256 16 ) ( -272 256 17 ) ( -272 258 16 ) tile191 [ 0 0.5 0 0 ] [ 0 0 -1 0 ] 270 1 1 "extrude_direction" "2"
} // brush 0
// brush 11 {
{ ( -144 64 48 ) ( -144 64 16 ) ( -128 128 16 ) tile043 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 272 0 -16 ) ( 272 2 -16 ) ( 272 0 -15 ) tile191 [ 0 -0.5 0 0 ] [ 0 0 -1 0 ] 270 1 1 ( -128 128 16 ) ( -96 128 48 ) ( -144 64 48 ) tile043 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 272 0 -16 ) ( 272 0 -15 ) ( 274.125 0 -16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 270 1 1 ( -144 64 48 ) ( -96 64 48 ) ( -96 64 16 ) tile043 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 272 0 -16 ) ( 274.125 0 -16 ) ( 272 2 -16 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 270 1 1 ( -96 64 16 ) ( -96 128 16 ) ( -128 128 16 ) tile043 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 544 256 16 ) ( 544 258 16 ) ( 546.125 256 16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 270 1 1 ( -144 64 48 ) ( -96 128 48 ) ( -96 64 48 ) tile043 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 544 256 16 ) ( 546.125 256 16 ) ( 544 256 17 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 270 1 1 ( -96 128 16 ) ( -96 128 48 ) ( -128 128 16 ) tile043 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 544 256 16 ) ( 544 256 17 ) ( 544 258 16 ) tile191 [ 0 0.5 0 0 ] [ 0 0 -1 0 ] 270 1 1 ( -96 64 48 ) ( -96 128 48 ) ( -96 128 16 ) tile043 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
} }
// brush 12 }
{ // entity 8
( 272 256 -16 ) ( 272 258 -16 ) ( 272 256 -15 ) tile191 [ 0 -0.5 0 0 ] [ 0 0 -1 0 ] 90 1 1 {
( 272 256 -16 ) ( 272 256 -15 ) ( 274.125 256 -16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 90 1 1 "classname" "func_destructablewall"
( 272 256 -16 ) ( 274.125 256 -16 ) ( 272 258 -16 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 90 1 1 // brush 0
( 544 512 16 ) ( 544 514 16 ) ( 546.125 512 16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 90 1 1 {
( 544 512 16 ) ( 546.125 512 16 ) ( 544 512 17 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 90 1 1 ( 128 0 32 ) ( 128 0 33 ) ( 128 -1 32 ) tile043 [ 0 1 0 0 ] [ 0 0 -1 0 ] 270 1 1
( 544 512 16 ) ( 544 512 17 ) ( 544 514 16 ) tile191 [ 0 0.5 0 0 ] [ 0 0 -1 0 ] 90 1 1 ( 64 -51 32 ) ( 63 -51 32 ) ( 64 -51 33 ) tile043 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
} ( 144 80 16 ) ( 143 80 16 ) ( 144 79 16 ) tile043 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
// brush 13 ( 64 0 112 ) ( 64 -1 112 ) ( 63 0 112 ) tile043 [ 1 0 0 0 ] [ 0 -1 0 0 ] 270 1 1
{ ( 144 16 16 ) ( 144 16 17 ) ( 143 16 16 ) tile043 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 0 256 -16 ) ( 0 258 -16 ) ( 0 256 -15 ) tile191 [ 0 -0.5 0 0 ] [ 0 0 -1 0 ] 90 1 1 ( 129 80 16 ) ( 129 79 16 ) ( 129 80 17 ) tile043 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 0 256 -16 ) ( 0 256 -15 ) ( 2.125 256 -16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 90 1 1 }
( 0 256 -16 ) ( 2.125 256 -16 ) ( 0 258 -16 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 90 1 1 }
( 272 512 16 ) ( 272 514 16 ) ( 274.125 512 16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 90 1 1
( 272 512 16 ) ( 274.125 512 16 ) ( 272 512 17 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 90 1 1
( 272 512 16 ) ( 272 512 17 ) ( 272 514 16 ) tile191 [ 0 0.5 0 0 ] [ 0 0 -1 0 ] 90 1 1
}
// brush 14
{
( -272 256 -16 ) ( -272 258 -16 ) ( -272 256 -15 ) tile191 [ 0 -0.5 0 0 ] [ 0 0 -1 0 ] 90 1 1
( -272 256 -16 ) ( -272 256 -15 ) ( -269.875 256 -16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 90 1 1
( -272 256 -16 ) ( -269.875 256 -16 ) ( -272 258 -16 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 90 1 1
( 0 512 16 ) ( 0 514 16 ) ( 2.125 512 16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 90 1 1
( 0 512 16 ) ( 2.125 512 16 ) ( 0 512 17 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 90 1 1
( 0 512 16 ) ( 0 512 17 ) ( 0 514 16 ) tile191 [ 0 0.5 0 0 ] [ 0 0 -1 0 ] 90 1 1
}
// brush 15
{
( -544 256 -16 ) ( -544 258 -16 ) ( -544 256 -15 ) tile191 [ 0 -0.5 0 0 ] [ 0 0 -1 0 ] 90 1 1
( -544 256 -16 ) ( -544 256 -15 ) ( -541.875 256 -16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 90 1 1
( -544 256 -16 ) ( -541.875 256 -16 ) ( -544 258 -16 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 90 1 1
( -272 512 16 ) ( -272 514 16 ) ( -269.875 512 16 ) tile191 [ 0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 90 1 1
( -272 512 16 ) ( -269.875 512 16 ) ( -272 512 17 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 90 1 1
( -272 512 16 ) ( -272 512 17 ) ( -272 514 16 ) tile191 [ 0 0.5 0 0 ] [ 0 0 -1 0 ] 90 1 1
}
}

View File

@@ -1,31 +1,130 @@
// Game: demo // Game: demo
// Format: Valve // Format: Valve
// entity 0 // entity 0
{ {
"mapversion" "220" "mapversion" "220"
"wad" "" "wad" ""
"classname" "worldspawn" "classname" "worldspawn"
"_tb_mod" "trenchbroom" "_tb_mod" "trenchbroom"
// brush 0 // brush 0
{ {
( -176 -64 -16 ) ( -176 -63 -16 ) ( -176 -64 -15 ) tile013 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 180 1 1 ( -176 -64 -16 ) ( -176 -63 -16 ) ( -176 -64 -15 ) tile013 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 180 1 1
( -64 -224 -16 ) ( -64 -224 -15 ) ( -63 -224 -16 ) tile013 [ 1 0 0 0 ] [ 0 0 -1 0 ] 180 1 1 ( -64 -224 -16 ) ( -64 -224 -15 ) ( -63 -224 -16 ) tile013 [ 1 0 0 0 ] [ 0 0 -1 0 ] 180 1 1
( -64 -64 -16 ) ( -63 -64 -16 ) ( -64 -63 -16 ) tile013 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 ( -64 -64 -16 ) ( -63 -64 -16 ) ( -64 -63 -16 ) tile013 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 64 64 16 ) ( 64 65 16 ) ( 65 64 16 ) tile013 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 ( 64 64 16 ) ( 64 65 16 ) ( 65 64 16 ) tile013 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 64 224 16 ) ( 65 224 16 ) ( 64 224 17 ) tile013 [ -1 0 0 0 ] [ 0 0 -1 0 ] 180 1 1 ( 64 224 16 ) ( 65 224 16 ) ( 64 224 17 ) tile013 [ -1 0 0 0 ] [ 0 0 -1 0 ] 180 1 1
( 192 64 16 ) ( 192 64 17 ) ( 192 65 16 ) tile013 [ 0 1 0 0 ] [ 0 0 -1 0 ] 180 1 1 ( 192 64 16 ) ( 192 64 17 ) ( 192 65 16 ) tile013 [ 0 1 0 0 ] [ 0 0 -1 0 ] 180 1 1
} }
} }
// entity 1 // entity 1
{ {
"classname" "func_movingplatform" "classname" "func_movingplatform"
// brush 0 "move_distance" "2"
{ "move_time" "2"
( 272 -64 -16 ) ( 272 -63 -16 ) ( 272 -64 -15 ) tile002 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1 "move_direction" "0.0 1.0 0.0"
( 384 -224 -16 ) ( 384 -224 -15 ) ( 385 -224 -16 ) tile002 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 // brush 0
( 384 -64 -16 ) ( 385 -64 -16 ) ( 384 -63 -16 ) tile002 [ -1 0 0 0 ] [ 0 -1 0 0 ] 180 1 1 {
( 512 64 16 ) ( 512 65 16 ) ( 513 64 16 ) tile002 [ 1 0 0 0 ] [ 0 -1 0 0 ] 180 1 1 ( 272 -64 -16 ) ( 272 -63 -16 ) ( 272 -64 -15 ) tile002 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 512 224 16 ) ( 513 224 16 ) ( 512 224 17 ) tile002 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 ( 384 -224 -16 ) ( 384 -224 -15 ) ( 385 -224 -16 ) tile002 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 640 64 16 ) ( 640 64 17 ) ( 640 65 16 ) tile002 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 ( 384 -64 -16 ) ( 385 -64 -16 ) ( 384 -63 -16 ) tile002 [ -1 0 0 0 ] [ 0 -1 0 0 ] 180 1 1
} ( 512 64 16 ) ( 512 65 16 ) ( 513 64 16 ) tile002 [ 1 0 0 0 ] [ 0 -1 0 0 ] 180 1 1
} ( 512 224 16 ) ( 513 224 16 ) ( 512 224 17 ) tile002 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 640 64 16 ) ( 640 64 17 ) ( 640 65 16 ) tile002 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
}
}
// entity 2
{
"classname" "func_destructablewall"
// brush 0
{
( 64 0 32 ) ( 64 0 33 ) ( 64 -1 32 ) tile043 [ 0 1 0 0 ] [ 0 0 -1 0 ] 270 1 1
( 0 -48 32 ) ( -1 -48 32 ) ( 0 -48 33 ) tile043 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 80 80 16 ) ( 79 80 16 ) ( 80 79 16 ) tile043 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 0 0 112 ) ( 0 -1 112 ) ( -1 0 112 ) tile043 [ 1 0 0 0 ] [ 0 -1 0 0 ] 270 1 1
( 80 16 16 ) ( 80 16 17 ) ( 79 16 16 ) tile043 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 96 80 16 ) ( 96 79 16 ) ( 96 80 17 ) tile043 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
}
}
// entity 3
{
"classname" "func_destructablewall"
"extrude_direction" "1"
// brush 0
{
( -176 -96 16 ) ( -176 -96 17 ) ( -176 -97 16 ) "Stone Base/albedo" [ 0 -1 0 0 ] [ -0 -0 -1 0 ] 0 0.007 0.007
( -64 -144 32 ) ( -64 -144 33 ) ( -63 -144 32 ) "Stone Base/albedo" [ 1 0 0 0 ] [ 0 0 -1 320 ] 0 0.007 0.007
( -144 -96 16 ) ( -144 -97 16 ) ( -143 -96 16 ) "Stone Base/albedo" [ -1 0 0 0 ] [ -0 -1 -0 0 ] 0 0.007 0.007
( -64 -176 112 ) ( -63 -176 112 ) ( -64 -177 112 ) "Stone Base/albedo" [ 1 -0 0 0 ] [ -0 -1 0 0 ] 0 0.007 0.007
( -144 -128 16 ) ( -143 -128 16 ) ( -144 -128 17 ) "Stone Base/albedo" [ -1 0 0 0 ] [ 0 0 -1 320 ] 0 0.007 0.007
( -13 -176 32 ) ( -13 -177 32 ) ( -13 -176 33 ) "Stone Base/albedo" [ -0 1 0 0 ] [ -0 0 -1 0 ] 0 0.007 0.007
}
}
// entity 4
{
"classname" "func_destructablewall"
"extrude_direction" "2"
// brush 0
{
( -208 320 32 ) ( -208 320 33 ) ( -208 319 32 ) tile043 [ 0 1 0 0 ] [ 0 0 -1 0 ] 270 1 1
( -160 269 32 ) ( -161 269 32 ) ( -160 269 33 ) tile043 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -80 400 16 ) ( -81 400 16 ) ( -80 399 16 ) tile043 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( -160 320 32 ) ( -160 319 32 ) ( -161 320 32 ) tile043 [ 1 0 0 0 ] [ 0 -1 0 0 ] 270 1 1
( -80 368 16 ) ( -80 368 17 ) ( -81 368 16 ) tile043 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -80 400 16 ) ( -80 399 16 ) ( -80 400 17 ) tile043 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
}
}
// entity 5
{
"classname" "func_destructablewall"
// brush 0
{
( 64 80 32 ) ( 64 80 33 ) ( 64 79 32 ) tile043 [ 0 1 0 0 ] [ 0 0 -1 0 ] 270 1 1
( 0 29 32 ) ( -1 29 32 ) ( 0 29 33 ) tile043 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 80 160 16 ) ( 79 160 16 ) ( 80 159 16 ) tile043 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 0 80 112 ) ( 0 79 112 ) ( -1 80 112 ) tile043 [ 1 0 0 0 ] [ 0 -1 0 0 ] 270 1 1
( 80 96 16 ) ( 80 96 17 ) ( 79 96 16 ) tile043 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 96 160 16 ) ( 96 159 16 ) ( 96 160 17 ) tile043 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
}
}
// entity 6
{
"classname" "func_destructablewall"
"extrude_direction" "1"
// brush 0
{
( 0 -80 16 ) ( 0 -80 17 ) ( 0 -81 16 ) tile043 [ 2.220446049250313e-16 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 112 -128 32 ) ( 112 -128 33 ) ( 113 -128 32 ) tile043 [ -1 2.220446049250313e-16 0 0 ] [ 0 0 -1 0 ] 270 1 1
( 32 -80 16 ) ( 32 -81 16 ) ( 33 -80 16 ) tile043 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 112 -160 112 ) ( 113 -160 112 ) ( 112 -161 112 ) tile043 [ 1 0 0 0 ] [ 0 -1 0 0 ] 270 1 1
( 32 -112 16 ) ( 33 -112 16 ) ( 32 -112 17 ) tile043 [ 1 -2.220446049250313e-16 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 163 -160 32 ) ( 163 -161 32 ) ( 163 -160 33 ) tile043 [ -2.220446049250313e-16 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
}
}
// entity 7
{
"classname" "func_destructablewall"
"extrude_direction" "2"
// brush 0
{
( -144 64 48 ) ( -144 64 16 ) ( -128 128 16 ) tile043 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -128 128 16 ) ( -96 128 48 ) ( -144 64 48 ) tile043 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -144 64 48 ) ( -96 64 48 ) ( -96 64 16 ) tile043 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -96 64 16 ) ( -96 128 16 ) ( -128 128 16 ) tile043 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( -144 64 48 ) ( -96 128 48 ) ( -96 64 48 ) tile043 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( -96 128 16 ) ( -96 128 48 ) ( -128 128 16 ) tile043 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -96 64 48 ) ( -96 128 48 ) ( -96 128 16 ) tile043 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
}
}
// entity 8
{
"classname" "func_destructablewall"
// brush 0
{
( 128 0 32 ) ( 128 0 33 ) ( 128 -1 32 ) tile043 [ 0 1 0 0 ] [ 0 0 -1 0 ] 270 1 1
( 64 -51 32 ) ( 63 -51 32 ) ( 64 -51 33 ) tile043 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 144 80 16 ) ( 143 80 16 ) ( 144 79 16 ) tile043 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 64 0 112 ) ( 64 -1 112 ) ( 63 0 112 ) tile043 [ 1 0 0 0 ] [ 0 -1 0 0 ] 270 1 1
( 144 16 16 ) ( 144 16 17 ) ( 143 16 16 ) tile043 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 129 80 16 ) ( 129 79 16 ) ( 129 80 17 ) tile043 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
}
}

View File

@@ -15,15 +15,6 @@
( 64 224 16 ) ( 65 224 16 ) ( 64 224 17 ) tile013 [ -1 0 0 0 ] [ 0 0 -1 0 ] 180 1 1 ( 64 224 16 ) ( 65 224 16 ) ( 64 224 17 ) tile013 [ -1 0 0 0 ] [ 0 0 -1 0 ] 180 1 1
( 192 64 16 ) ( 192 64 17 ) ( 192 65 16 ) tile013 [ 0 1 0 0 ] [ 0 0 -1 0 ] 180 1 1 ( 192 64 16 ) ( 192 64 17 ) ( 192 65 16 ) tile013 [ 0 1 0 0 ] [ 0 0 -1 0 ] 180 1 1
} }
// brush 1
{
( -96 -80 16 ) ( -96 -79 16 ) ( -96 -80 17 ) tile043 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -96 -80 16 ) ( -96 -80 17 ) ( -95 -80 16 ) tile043 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -96 -80 16 ) ( -95 -80 16 ) ( -96 -79 16 ) tile043 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( -16 0 112 ) ( -16 1 112 ) ( -15 0 112 ) tile043 [ 1 0 0 0 ] [ 0 -1 0 0 ] 270 1 1
( -16 0 32 ) ( -15 0 32 ) ( -16 0 33 ) tile043 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -80 0 32 ) ( -80 0 33 ) ( -80 1 32 ) tile043 [ 0 1 0 0 ] [ 0 0 -1 0 ] 270 1 1
}
} }
// entity 1 // entity 1
{ {
@@ -41,3 +32,84 @@
( 640 64 16 ) ( 640 64 17 ) ( 640 65 16 ) tile002 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 ( 640 64 16 ) ( 640 64 17 ) ( 640 65 16 ) tile002 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
} }
} }
// entity 2
{
"classname" "func_destructablewall"
// brush 0
{
( 64 0 32 ) ( 64 0 33 ) ( 64 -1 32 ) tile043 [ 0 1 0 0 ] [ 0 0 -1 0 ] 270 1 1
( 0 -48 32 ) ( -1 -48 32 ) ( 0 -48 33 ) tile043 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 80 80 16 ) ( 79 80 16 ) ( 80 79 16 ) tile043 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 0 0 112 ) ( 0 -1 112 ) ( -1 0 112 ) tile043 [ 1 0 0 0 ] [ 0 -1 0 0 ] 270 1 1
( 80 16 16 ) ( 80 16 17 ) ( 79 16 16 ) tile043 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 96 80 16 ) ( 96 79 16 ) ( 96 80 17 ) tile043 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
}
}
// entity 3
{
"classname" "func_destructablewall"
"extrude_direction" "1"
// brush 0
{
( -176 -96 16 ) ( -176 -96 17 ) ( -176 -97 16 ) "Stone Base/albedo" [ 0 -1 0 0 ] [ -0 -0 -1 0 ] 0 0.25 0.25
( -64 -144 32 ) ( -64 -144 33 ) ( -63 -144 32 ) "Stone Base/albedo" [ 1 0 -0 1680 ] [ 0 -0 -1 2400 ] 0 0.06 0.06
( -144 -96 16 ) ( -144 -97 16 ) ( -143 -96 16 ) "Stone Base/albedo" [ -1 0 0 0 ] [ -0 -1 -0 0 ] 0 0.25 0.25
( -64 -176 112 ) ( -63 -176 112 ) ( -64 -177 112 ) "Stone Base/albedo" [ 1 -0 0 0 ] [ -0 -1 0 0 ] 0 0.25 0.25
( -144 -128 16 ) ( -143 -128 16 ) ( -144 -128 17 ) "Stone Base/albedo" [ -1 0 0 1680 ] [ 0 0 -1 2400 ] 0 0.06 0.06
( -13 -176 32 ) ( -13 -177 32 ) ( -13 -176 33 ) "Stone Base/albedo" [ -0 1 0 0 ] [ -0 0 -1 0 ] 0 0.25 0.25
}
}
// entity 4
{
"classname" "func_destructablewall"
"extrude_direction" "2"
// brush 0
{
( -208 320 32 ) ( -208 320 33 ) ( -208 319 32 ) tile043 [ 0 1 0 0 ] [ 0 0 -1 0 ] 270 1 1
( -160 269 32 ) ( -161 269 32 ) ( -160 269 33 ) tile043 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -80 400 16 ) ( -81 400 16 ) ( -80 399 16 ) tile043 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( -160 320 32 ) ( -160 319 32 ) ( -161 320 32 ) tile043 [ 1 0 0 0 ] [ 0 -1 0 0 ] 270 1 1
( -80 368 16 ) ( -80 368 17 ) ( -81 368 16 ) tile043 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -80 400 16 ) ( -80 399 16 ) ( -80 400 17 ) tile043 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
}
}
// entity 5
{
"classname" "func_destructablewall"
"extrude_direction" "1"
// brush 0
{
( 0 -80 16 ) ( 0 -80 17 ) ( 0 -81 16 ) tile043 [ 2.220446049250313e-16 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 112 -128 32 ) ( 112 -128 33 ) ( 113 -128 32 ) tile043 [ -1 2.220446049250313e-16 0 0 ] [ 0 0 -1 0 ] 270 1 1
( 32 -80 16 ) ( 32 -81 16 ) ( 33 -80 16 ) tile043 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 112 -160 112 ) ( 113 -160 112 ) ( 112 -161 112 ) tile043 [ 1 0 0 0 ] [ 0 -1 0 0 ] 270 1 1
( 32 -112 16 ) ( 33 -112 16 ) ( 32 -112 17 ) tile043 [ 1 -2.220446049250313e-16 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 176 -160 32 ) ( 176 -161 32 ) ( 176 -160 33 ) tile043 [ -2.220446049250313e-16 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
}
}
// entity 6
{
"classname" "func_destructablewall"
// brush 0
{
( 128 0 32 ) ( 128 0 33 ) ( 128 -1 32 ) tile043 [ 0 1 0 0 ] [ 0 0 -1 0 ] 270 1 1
( 64 -51 32 ) ( 63 -51 32 ) ( 64 -51 33 ) tile043 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 144 80 16 ) ( 143 80 16 ) ( 144 79 16 ) tile043 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 64 0 112 ) ( 64 -1 112 ) ( 63 0 112 ) tile043 [ 1 0 0 0 ] [ 0 -1 0 0 ] 270 1 1
( 144 16 16 ) ( 144 16 17 ) ( 143 16 16 ) tile043 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 129 80 16 ) ( 129 79 16 ) ( 129 80 17 ) tile043 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
}
}
// entity 7
{
"classname" "func_destructablewall"
// brush 0
{
( 64 80 32 ) ( 64 80 33 ) ( 64 79 32 ) tile043 [ 0 1 0 0 ] [ 0 0 -1 0 ] 270 1 1
( 0 29 32 ) ( -1 29 32 ) ( 0 29 33 ) tile043 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 80 160 16 ) ( 79 160 16 ) ( 80 159 16 ) tile043 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 0 80 112 ) ( 0 79 112 ) ( -1 80 112 ) tile043 [ 1 0 0 0 ] [ 0 -1 0 0 ] 270 1 1
( 80 96 16 ) ( 80 96 17 ) ( 79 96 16 ) tile043 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 96 160 16 ) ( 96 159 16 ) ( 96 160 17 ) tile043 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
}
}

View File

@@ -1,60 +0,0 @@
// Game: demo
// Format: Valve
// entity 0
{
"mapversion" "220"
"wad" ""
"classname" "worldspawn"
"_tb_mod" "trenchbroom"
// brush 0
{
( -176 -64 -16 ) ( -176 -63 -16 ) ( -176 -64 -15 ) tile013 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 180 1 1
( -64 -224 -16 ) ( -64 -224 -15 ) ( -63 -224 -16 ) tile013 [ 1 0 0 0 ] [ 0 0 -1 0 ] 180 1 1
( -64 -64 -16 ) ( -63 -64 -16 ) ( -64 -63 -16 ) tile013 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 64 64 16 ) ( 64 65 16 ) ( 65 64 16 ) tile013 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 64 224 16 ) ( 65 224 16 ) ( 64 224 17 ) tile013 [ -1 0 0 0 ] [ 0 0 -1 0 ] 180 1 1
( 192 64 16 ) ( 192 64 17 ) ( 192 65 16 ) tile013 [ 0 1 0 0 ] [ 0 0 -1 0 ] 180 1 1
}
}
// entity 1
{
"classname" "func_movingplatform"
"move_distance" "2"
"move_time" "2"
"move_direction" "0.0 1.0 0.0"
// brush 0
{
( 272 -64 -16 ) ( 272 -63 -16 ) ( 272 -64 -15 ) tile002 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 384 -224 -16 ) ( 384 -224 -15 ) ( 385 -224 -16 ) tile002 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 384 -64 -16 ) ( 385 -64 -16 ) ( 384 -63 -16 ) tile002 [ -1 0 0 0 ] [ 0 -1 0 0 ] 180 1 1
( 512 64 16 ) ( 512 65 16 ) ( 513 64 16 ) tile002 [ 1 0 0 0 ] [ 0 -1 0 0 ] 180 1 1
( 512 224 16 ) ( 513 224 16 ) ( 512 224 17 ) tile002 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 640 64 16 ) ( 640 64 17 ) ( 640 65 16 ) tile002 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
}
}
// entity 2
{
"classname" "func_destructablewall"
// brush 0
{
( -96 -80 16 ) ( -96 -79 16 ) ( -96 -80 17 ) tile043 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -96 -80 16 ) ( -96 -80 17 ) ( -95 -80 16 ) tile043 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -96 -80 16 ) ( -95 -80 16 ) ( -96 -79 16 ) tile043 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( -16 0 112 ) ( -16 1 112 ) ( -15 0 112 ) tile043 [ 1 0 0 0 ] [ 0 -1 0 0 ] 270 1 1
( -16 48 32 ) ( -15 48 32 ) ( -16 48 33 ) tile043 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -80 0 32 ) ( -80 0 33 ) ( -80 1 32 ) tile043 [ 0 1 0 0 ] [ 0 0 -1 0 ] 270 1 1
}
}
// entity 3
{
"classname" "func_destructablewall"
// brush 0
{
( -16 -96 16 ) ( -16 -95 16 ) ( -16 -96 17 ) tile043 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -16 -96 16 ) ( -16 -96 17 ) ( -15 -96 16 ) tile043 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -16 -96 16 ) ( -15 -96 16 ) ( -16 -95 16 ) tile043 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 64 -16 112 ) ( 64 -15 112 ) ( 65 -16 112 ) tile043 [ 1 0 0 0 ] [ 0 -1 0 0 ] 270 1 1
( 64 32 32 ) ( 65 32 32 ) ( 64 32 33 ) tile043 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 0 -16 32 ) ( 0 -16 33 ) ( 0 -15 32 ) tile043 [ 0 1 0 0 ] [ 0 0 -1 0 ] 270 1 1
}
}

View File

@@ -1,60 +0,0 @@
// Game: demo
// Format: Valve
// entity 0
{
"mapversion" "220"
"wad" ""
"classname" "worldspawn"
"_tb_mod" "trenchbroom"
// brush 0
{
( -176 -64 -16 ) ( -176 -63 -16 ) ( -176 -64 -15 ) tile013 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 180 1 1
( -64 -224 -16 ) ( -64 -224 -15 ) ( -63 -224 -16 ) tile013 [ 1 0 0 0 ] [ 0 0 -1 0 ] 180 1 1
( -64 -64 -16 ) ( -63 -64 -16 ) ( -64 -63 -16 ) tile013 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 64 64 16 ) ( 64 65 16 ) ( 65 64 16 ) tile013 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 64 224 16 ) ( 65 224 16 ) ( 64 224 17 ) tile013 [ -1 0 0 0 ] [ 0 0 -1 0 ] 180 1 1
( 192 64 16 ) ( 192 64 17 ) ( 192 65 16 ) tile013 [ 0 1 0 0 ] [ 0 0 -1 0 ] 180 1 1
}
}
// entity 1
{
"classname" "func_movingplatform"
"move_distance" "2"
"move_time" "2"
"move_direction" "0.0 1.0 0.0"
// brush 0
{
( 272 -64 -16 ) ( 272 -63 -16 ) ( 272 -64 -15 ) tile002 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 384 -224 -16 ) ( 384 -224 -15 ) ( 385 -224 -16 ) tile002 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 384 -64 -16 ) ( 385 -64 -16 ) ( 384 -63 -16 ) tile002 [ -1 0 0 0 ] [ 0 -1 0 0 ] 180 1 1
( 512 64 16 ) ( 512 65 16 ) ( 513 64 16 ) tile002 [ 1 0 0 0 ] [ 0 -1 0 0 ] 180 1 1
( 512 224 16 ) ( 513 224 16 ) ( 512 224 17 ) tile002 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 640 64 16 ) ( 640 64 17 ) ( 640 65 16 ) tile002 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
}
}
// entity 2
{
"classname" "func_destructablewall"
// brush 0
{
( 64 -16 32 ) ( 64 -16 33 ) ( 64 -17 32 ) tile043 [ 0 1 0 0 ] [ 0 0 -1 0 ] 270 1 1
( 0 -67 32 ) ( -1 -67 32 ) ( 0 -67 33 ) tile043 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 80 64 16 ) ( 79 64 16 ) ( 80 63 16 ) tile043 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 0 -16 112 ) ( 0 -17 112 ) ( -1 -16 112 ) tile043 [ 1 0 0 0 ] [ 0 -1 0 0 ] 270 1 1
( 80 32 16 ) ( 80 32 17 ) ( 79 32 16 ) tile043 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 80 64 16 ) ( 80 63 16 ) ( 80 64 17 ) tile043 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
}
}
// entity 3
{
"classname" "func_destructablewall"
// brush 0
{
( -115 -64 32 ) ( -115 -63 32 ) ( -115 -64 33 ) tile043 [ -2.220446049250313e-16 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 16 -144 16 ) ( 15 -144 16 ) ( 16 -144 17 ) tile043 [ -1 -2.220446049250313e-16 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 16 -144 16 ) ( 16 -143 16 ) ( 15 -144 16 ) tile043 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( -64 -64 112 ) ( -65 -64 112 ) ( -64 -63 112 ) tile043 [ 1 0 0 0 ] [ 0 -1 0 0 ] 270 1 1
( -64 -128 32 ) ( -64 -128 33 ) ( -65 -128 32 ) tile043 [ 1 2.220446049250313e-16 0 0 ] [ 0 0 -1 0 ] 270 1 1
( -16 -144 16 ) ( -16 -144 17 ) ( -16 -143 16 ) tile043 [ 2.220446049250313e-16 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
}
}

View File

@@ -1,116 +0,0 @@
// Game: demo
// Format: Valve
// entity 0
{
"mapversion" "220"
"wad" ""
"classname" "worldspawn"
"_tb_mod" "trenchbroom"
// brush 0
{
( -176 -64 -16 ) ( -176 -63 -16 ) ( -176 -64 -15 ) tile013 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 180 1 1
( -64 -224 -16 ) ( -64 -224 -15 ) ( -63 -224 -16 ) tile013 [ 1 0 0 0 ] [ 0 0 -1 0 ] 180 1 1
( -64 -64 -16 ) ( -63 -64 -16 ) ( -64 -63 -16 ) tile013 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 64 64 16 ) ( 64 65 16 ) ( 65 64 16 ) tile013 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 64 224 16 ) ( 65 224 16 ) ( 64 224 17 ) tile013 [ -1 0 0 0 ] [ 0 0 -1 0 ] 180 1 1
( 192 64 16 ) ( 192 64 17 ) ( 192 65 16 ) tile013 [ 0 1 0 0 ] [ 0 0 -1 0 ] 180 1 1
}
}
// entity 1
{
"classname" "func_movingplatform"
"move_distance" "2"
"move_time" "2"
"move_direction" "0.0 1.0 0.0"
// brush 0
{
( 272 -64 -16 ) ( 272 -63 -16 ) ( 272 -64 -15 ) tile002 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 384 -224 -16 ) ( 384 -224 -15 ) ( 385 -224 -16 ) tile002 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 384 -64 -16 ) ( 385 -64 -16 ) ( 384 -63 -16 ) tile002 [ -1 0 0 0 ] [ 0 -1 0 0 ] 180 1 1
( 512 64 16 ) ( 512 65 16 ) ( 513 64 16 ) tile002 [ 1 0 0 0 ] [ 0 -1 0 0 ] 180 1 1
( 512 224 16 ) ( 513 224 16 ) ( 512 224 17 ) tile002 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 640 64 16 ) ( 640 64 17 ) ( 640 65 16 ) tile002 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
}
}
// entity 2
{
"classname" "func_destructablewall"
// brush 0
{
( 64 0 32 ) ( 64 0 33 ) ( 64 -1 32 ) tile043 [ 0 1 0 0 ] [ 0 0 -1 0 ] 270 1 1
( 0 -48 32 ) ( -1 -48 32 ) ( 0 -48 33 ) tile043 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 80 80 16 ) ( 79 80 16 ) ( 80 79 16 ) tile043 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 0 0 112 ) ( 0 -1 112 ) ( -1 0 112 ) tile043 [ 1 0 0 0 ] [ 0 -1 0 0 ] 270 1 1
( 80 16 16 ) ( 80 16 17 ) ( 79 16 16 ) tile043 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 96 80 16 ) ( 96 79 16 ) ( 96 80 17 ) tile043 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
}
}
// entity 3
{
"classname" "func_destructablewall"
"extrude_direction" "1"
// brush 0
{
( -176 -80 16 ) ( -176 -80 17 ) ( -176 -81 16 ) tile043 [ 2.220446049250313e-16 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -64 -128 32 ) ( -64 -128 33 ) ( -63 -128 32 ) tile043 [ -1 2.220446049250313e-16 0 0 ] [ 0 0 -1 0 ] 270 1 1
( -144 -80 16 ) ( -144 -81 16 ) ( -143 -80 16 ) tile043 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( -64 -160 112 ) ( -63 -160 112 ) ( -64 -161 112 ) tile043 [ 1 0 0 0 ] [ 0 -1 0 0 ] 270 1 1
( -144 -112 16 ) ( -143 -112 16 ) ( -144 -112 17 ) tile043 [ 1 -2.220446049250313e-16 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -13 -160 32 ) ( -13 -161 32 ) ( -13 -160 33 ) tile043 [ -2.220446049250313e-16 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
}
}
// entity 4
{
"classname" "func_destructablewall"
"extrude_direction" "2"
// brush 0
{
( -208 320 32 ) ( -208 320 33 ) ( -208 319 32 ) tile043 [ 0 1 0 0 ] [ 0 0 -1 0 ] 270 1 1
( -160 269 32 ) ( -161 269 32 ) ( -160 269 33 ) tile043 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -80 400 16 ) ( -81 400 16 ) ( -80 399 16 ) tile043 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( -160 320 32 ) ( -160 319 32 ) ( -161 320 32 ) tile043 [ 1 0 0 0 ] [ 0 -1 0 0 ] 270 1 1
( -80 368 16 ) ( -80 368 17 ) ( -81 368 16 ) tile043 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -80 400 16 ) ( -80 399 16 ) ( -80 400 17 ) tile043 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
}
}
// entity 5
{
"classname" "func_destructablewall"
// brush 0
{
( 64 80 32 ) ( 64 80 33 ) ( 64 79 32 ) tile043 [ 0 1 0 0 ] [ 0 0 -1 0 ] 270 1 1
( 0 29 32 ) ( -1 29 32 ) ( 0 29 33 ) tile043 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 80 160 16 ) ( 79 160 16 ) ( 80 159 16 ) tile043 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 0 80 112 ) ( 0 79 112 ) ( -1 80 112 ) tile043 [ 1 0 0 0 ] [ 0 -1 0 0 ] 270 1 1
( 80 96 16 ) ( 80 96 17 ) ( 79 96 16 ) tile043 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 96 160 16 ) ( 96 159 16 ) ( 96 160 17 ) tile043 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
}
}
// entity 6
{
"classname" "func_destructablewall"
"extrude_direction" "1"
// brush 0
{
( 0 -80 16 ) ( 0 -80 17 ) ( 0 -81 16 ) tile043 [ 2.220446049250313e-16 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 112 -128 32 ) ( 112 -128 33 ) ( 113 -128 32 ) tile043 [ -1 2.220446049250313e-16 0 0 ] [ 0 0 -1 0 ] 270 1 1
( 32 -80 16 ) ( 32 -81 16 ) ( 33 -80 16 ) tile043 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 112 -160 112 ) ( 113 -160 112 ) ( 112 -161 112 ) tile043 [ 1 0 0 0 ] [ 0 -1 0 0 ] 270 1 1
( 32 -112 16 ) ( 33 -112 16 ) ( 32 -112 17 ) tile043 [ 1 -2.220446049250313e-16 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 163 -160 32 ) ( 163 -161 32 ) ( 163 -160 33 ) tile043 [ -2.220446049250313e-16 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
}
}
// entity 7
{
"classname" "func_destructablewall"
"extrude_direction" "2"
// brush 0
{
( -128 112 32 ) ( -144 64 32 ) ( -144 64 16 ) tile043 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -96 128 16 ) ( -96 128 32 ) ( -128 112 32 ) tile043 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -144 64 32 ) ( -96 64 32 ) ( -96 64 16 ) tile043 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -96 64 16 ) ( -96 128 16 ) ( -128 112 16 ) tile043 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( -128 112 32 ) ( -96 128 32 ) ( -96 64 32 ) tile043 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( -96 64 32 ) ( -96 128 32 ) ( -96 128 16 ) tile043 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
}
}

View File

@@ -51,12 +51,12 @@
"extrude_direction" "1" "extrude_direction" "1"
// brush 0 // brush 0
{ {
( -176 -80 16 ) ( -176 -80 17 ) ( -176 -81 16 ) tile043 [ 2.220446049250313e-16 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 ( -176 -96 16 ) ( -176 -96 17 ) ( -176 -97 16 ) "Stone Base/albedo" [ 0 -1 0 0 ] [ -0 -0 -1 0 ] 0 0.25 0.25
( -64 -128 32 ) ( -64 -128 33 ) ( -63 -128 32 ) tile043 [ -1 2.220446049250313e-16 0 0 ] [ 0 0 -1 0 ] 270 1 1 ( -64 -144 32 ) ( -64 -144 33 ) ( -63 -144 32 ) "Stone Base/albedo" [ 1 0 -0 1680 ] [ 0 -0 -1 2400 ] 0 0.06 0.06
( -144 -80 16 ) ( -144 -81 16 ) ( -143 -80 16 ) tile043 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 ( -144 -96 16 ) ( -144 -97 16 ) ( -143 -96 16 ) "Stone Base/albedo" [ -1 0 0 0 ] [ -0 -1 -0 0 ] 0 0.25 0.25
( -64 -160 112 ) ( -63 -160 112 ) ( -64 -161 112 ) tile043 [ 1 0 0 0 ] [ 0 -1 0 0 ] 270 1 1 ( -64 -176 112 ) ( -63 -176 112 ) ( -64 -177 112 ) "Stone Base/albedo" [ 1 -0 0 0 ] [ -0 -1 0 0 ] 0 0.25 0.25
( -144 -112 16 ) ( -143 -112 16 ) ( -144 -112 17 ) tile043 [ 1 -2.220446049250313e-16 0 0 ] [ 0 0 -1 0 ] 0 1 1 ( -144 -128 16 ) ( -143 -128 16 ) ( -144 -128 17 ) "Stone Base/albedo" [ -1 0 0 1680 ] [ 0 0 -1 2400 ] 0 0.06 0.06
( -13 -160 32 ) ( -13 -161 32 ) ( -13 -160 33 ) tile043 [ -2.220446049250313e-16 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1 ( -13 -176 32 ) ( -13 -177 32 ) ( -13 -176 33 ) "Stone Base/albedo" [ -0 1 0 0 ] [ -0 0 -1 0 ] 0 0.25 0.25
} }
} }
// entity 4 // entity 4
@@ -78,48 +78,6 @@
"classname" "func_destructablewall" "classname" "func_destructablewall"
// brush 0 // brush 0
{ {
( 64 80 32 ) ( 64 80 33 ) ( 64 79 32 ) tile043 [ 0 1 0 0 ] [ 0 0 -1 0 ] 270 1 1
( 0 29 32 ) ( -1 29 32 ) ( 0 29 33 ) tile043 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 80 160 16 ) ( 79 160 16 ) ( 80 159 16 ) tile043 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 0 80 112 ) ( 0 79 112 ) ( -1 80 112 ) tile043 [ 1 0 0 0 ] [ 0 -1 0 0 ] 270 1 1
( 80 96 16 ) ( 80 96 17 ) ( 79 96 16 ) tile043 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 96 160 16 ) ( 96 159 16 ) ( 96 160 17 ) tile043 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
}
}
// entity 6
{
"classname" "func_destructablewall"
"extrude_direction" "1"
// brush 0
{
( 0 -80 16 ) ( 0 -80 17 ) ( 0 -81 16 ) tile043 [ 2.220446049250313e-16 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 112 -128 32 ) ( 112 -128 33 ) ( 113 -128 32 ) tile043 [ -1 2.220446049250313e-16 0 0 ] [ 0 0 -1 0 ] 270 1 1
( 32 -80 16 ) ( 32 -81 16 ) ( 33 -80 16 ) tile043 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 112 -160 112 ) ( 113 -160 112 ) ( 112 -161 112 ) tile043 [ 1 0 0 0 ] [ 0 -1 0 0 ] 270 1 1
( 32 -112 16 ) ( 33 -112 16 ) ( 32 -112 17 ) tile043 [ 1 -2.220446049250313e-16 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 163 -160 32 ) ( 163 -161 32 ) ( 163 -160 33 ) tile043 [ -2.220446049250313e-16 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
}
}
// entity 7
{
"classname" "func_destructablewall"
"extrude_direction" "2"
// brush 0
{
( -144 64 48 ) ( -144 64 16 ) ( -128 128 16 ) tile043 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -128 128 16 ) ( -96 128 48 ) ( -144 64 48 ) tile043 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -144 64 48 ) ( -96 64 48 ) ( -96 64 16 ) tile043 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -96 64 16 ) ( -96 128 16 ) ( -128 128 16 ) tile043 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( -144 64 48 ) ( -96 128 48 ) ( -96 64 48 ) tile043 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( -96 128 16 ) ( -96 128 48 ) ( -128 128 16 ) tile043 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -96 64 48 ) ( -96 128 48 ) ( -96 128 16 ) tile043 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
}
}
// entity 8
{
"classname" "func_destructablewall"
// brush 0
{
( 128 0 32 ) ( 128 0 33 ) ( 128 -1 32 ) tile043 [ 0 1 0 0 ] [ 0 0 -1 0 ] 270 1 1 ( 128 0 32 ) ( 128 0 33 ) ( 128 -1 32 ) tile043 [ 0 1 0 0 ] [ 0 0 -1 0 ] 270 1 1
( 64 -51 32 ) ( 63 -51 32 ) ( 64 -51 33 ) tile043 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 ( 64 -51 32 ) ( 63 -51 32 ) ( 64 -51 33 ) tile043 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 144 80 16 ) ( 143 80 16 ) ( 144 79 16 ) tile043 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 ( 144 80 16 ) ( 143 80 16 ) ( 144 79 16 ) tile043 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
@@ -128,3 +86,30 @@
( 129 80 16 ) ( 129 79 16 ) ( 129 80 17 ) tile043 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1 ( 129 80 16 ) ( 129 79 16 ) ( 129 80 17 ) tile043 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
} }
} }
// entity 6
{
"classname" "func_geo"
// brush 0
{
( 64 80 32 ) ( 64 80 33 ) ( 64 79 32 ) tile043 [ 0 1 0 0 ] [ 0 0 -1 0 ] 270 1 1
( 0 29 32 ) ( -1 29 32 ) ( 0 29 33 ) tile043 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 80 160 16 ) ( 79 160 16 ) ( 80 159 16 ) tile043 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 0 80 112 ) ( 0 79 112 ) ( -1 80 112 ) tile043 [ 1 0 0 0 ] [ 0 -1 0 0 ] 270 1 1
( 80 96 16 ) ( 80 96 17 ) ( 79 96 16 ) tile043 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 96 160 16 ) ( 96 159 16 ) ( 96 160 17 ) tile043 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
}
}
// entity 7
{
"classname" "func_geo"
"extrude_direction" "1"
// brush 0
{
( 0 -96 16 ) ( 0 -96 17 ) ( 0 -97 16 ) tile043 [ 2.220446049250313e-16 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 112 -144 32 ) ( 112 -144 33 ) ( 113 -144 32 ) tile043 [ -1 2.220446049250313e-16 0 0 ] [ 0 0 -1 0 ] 270 1 1
( 32 -96 16 ) ( 32 -97 16 ) ( 33 -96 16 ) tile043 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 112 -176 112 ) ( 113 -176 112 ) ( 112 -177 112 ) tile043 [ 1 0 0 0 ] [ 0 -1 0 0 ] 270 1 1
( 32 -128 16 ) ( 33 -128 16 ) ( 32 -128 17 ) tile043 [ 1 -2.220446049250313e-16 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 163 -176 32 ) ( 163 -177 32 ) ( 163 -176 33 ) tile043 [ -2.220446049250313e-16 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 MiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cgn5jtjilj4o2"
path="res://.godot/imported/albedo.png-c9467079c2560110d7a406cbf02b588b.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://trenchbroom/textures/Concrete Trimsheet/albedo.png"
dest_files=["res://.godot/imported/albedo.png-c9467079c2560110d7a406cbf02b588b.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b01emixymb3w2"
path="res://.godot/imported/ao.png-cc585abad8c5bdd965c9f768c4972044.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://trenchbroom/textures/Concrete Trimsheet/ao.png"
dest_files=["res://.godot/imported/ao.png-cc585abad8c5bdd965c9f768c4972044.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b5ixgw1r8yv0"
path="res://.godot/imported/displacement.png-f7acd672c788173cc64aba629b031337.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://trenchbroom/textures/Concrete Trimsheet/displacement.png"
dest_files=["res://.godot/imported/displacement.png-f7acd672c788173cc64aba629b031337.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

View File

@@ -0,0 +1,41 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://ddwy3erxcerb1"
path.s3tc="res://.godot/imported/metalness.png-811de7d8398e0f7ac5d420b69ae07b8b.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://trenchbroom/textures/Concrete Trimsheet/metalness.png"
dest_files=["res://.godot/imported/metalness.png-811de7d8398e0f7ac5d420b69ae07b8b.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 MiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://2wh1r7d623bj"
path="res://.godot/imported/normal.png-561203e071145348ed337aeb4ea37bbe.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://trenchbroom/textures/Concrete Trimsheet/normal.png"
dest_files=["res://.godot/imported/normal.png-561203e071145348ed337aeb4ea37bbe.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

View File

@@ -0,0 +1,41 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://fnabneyexyga"
path.s3tc="res://.godot/imported/roughness.png-366d2753b7f639d68976124291e62a4b.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://trenchbroom/textures/Concrete Trimsheet/roughness.png"
dest_files=["res://.godot/imported/roughness.png-366d2753b7f639d68976124291e62a4b.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 MiB

View File

@@ -2,8 +2,8 @@
importer="texture" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://dwhdp7spars2b" uid="uid://cqtxxrpfvymko"
path.s3tc="res://.godot/imported/texture.png-59546a6b6ae00ae598d09228d4c66fd2.s3tc.ctex" path.s3tc="res://.godot/imported/albedo.png-94a1bad07a09df0b9c2c6971f6d1a756.s3tc.ctex"
metadata={ metadata={
"imported_formats": ["s3tc_bptc"], "imported_formats": ["s3tc_bptc"],
"vram_texture": true "vram_texture": true
@@ -11,8 +11,8 @@ metadata={
[deps] [deps]
source_file="res://assets/textures/texture.png" source_file="res://trenchbroom/textures/Stone Base/albedo.png"
dest_files=["res://.godot/imported/texture.png-59546a6b6ae00ae598d09228d4c66fd2.s3tc.ctex"] dest_files=["res://.godot/imported/albedo.png-94a1bad07a09df0b9c2c6971f6d1a756.s3tc.ctex"]
[params] [params]

View File

@@ -0,0 +1,17 @@
[gd_resource type="StandardMaterial3D" load_steps=6 format=3 uid="uid://bh6w2gaj6r1nf"]
[ext_resource type="Texture2D" uid="uid://cqtxxrpfvymko" path="res://trenchbroom/textures/Stone Base/albedo.png" id="1_bp3ec"]
[ext_resource type="Texture2D" uid="uid://cyk5a2yldx1gj" path="res://trenchbroom/textures/Stone Base/ao.png" id="2_d52id"]
[ext_resource type="Texture2D" uid="uid://ddwy3erxcerb1" path="res://trenchbroom/textures/Concrete Trimsheet/metalness.png" id="3_8wxnd"]
[ext_resource type="Texture2D" uid="uid://bpbj8v704qrnv" path="res://trenchbroom/textures/Stone Base/normal.png" id="4_niemy"]
[ext_resource type="Texture2D" uid="uid://fnabneyexyga" path="res://trenchbroom/textures/Concrete Trimsheet/roughness.png" id="5_a0haq"]
[resource]
albedo_texture = ExtResource("1_bp3ec")
metallic = 1.0
metallic_specular = 0.0
metallic_texture = ExtResource("3_8wxnd")
roughness_texture = ExtResource("5_a0haq")
normal_texture = ExtResource("4_niemy")
ao_texture = ExtResource("2_d52id")
texture_filter = 2

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

View File

@@ -0,0 +1,41 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cyk5a2yldx1gj"
path.s3tc="res://.godot/imported/ao.png-f4bde4f93e17cff49491d998d779f05e.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://trenchbroom/textures/Stone Base/ao.png"
dest_files=["res://.godot/imported/ao.png-f4bde4f93e17cff49491d998d779f05e.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=8
roughness/src_normal="res://trenchbroom/textures/Stone Base/normal.png"
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

View File

@@ -0,0 +1,41 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bkhltyv2nlja0"
path.s3tc="res://.godot/imported/displacement.png-091d413bff0b611e04185243b1b3c4fc.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://trenchbroom/textures/Stone Base/displacement.png"
dest_files=["res://.godot/imported/displacement.png-091d413bff0b611e04185243b1b3c4fc.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

View File

@@ -2,8 +2,8 @@
importer="texture" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://doknmohl75xnp" uid="uid://d15eqalyirq77"
path.s3tc="res://.godot/imported/t_floormetal1.png-42986c698f9d8b89446ac25d30252b9c.s3tc.ctex" path.s3tc="res://.godot/imported/metalness.png-4d0f08f876483f872b739098571e4533.s3tc.ctex"
metadata={ metadata={
"imported_formats": ["s3tc_bptc"], "imported_formats": ["s3tc_bptc"],
"vram_texture": true "vram_texture": true
@@ -11,8 +11,8 @@ metadata={
[deps] [deps]
source_file="res://assets/textures/t_floormetal1.png" source_file="res://trenchbroom/textures/Stone Base/metalness.png"
dest_files=["res://.godot/imported/t_floormetal1.png-42986c698f9d8b89446ac25d30252b9c.s3tc.ctex"] dest_files=["res://.godot/imported/metalness.png-4d0f08f876483f872b739098571e4533.s3tc.ctex"]
[params] [params]

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 MiB

View File

@@ -0,0 +1,41 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bpbj8v704qrnv"
path.s3tc="res://.godot/imported/normal.png-6b358cdb8f5db94cc35c6aaf1ca79241.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://trenchbroom/textures/Stone Base/normal.png"
dest_files=["res://.godot/imported/normal.png-6b358cdb8f5db94cc35c6aaf1ca79241.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=1
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=1
roughness/src_normal="res://trenchbroom/textures/Stone Base/normal.png"
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 MiB

View File

@@ -0,0 +1,41 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bst8ahg5ksw7d"
path.s3tc="res://.godot/imported/roughness.png-8db90d670ae678b651ee6728ab1574b5.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://trenchbroom/textures/Stone Base/roughness.png"
dest_files=["res://.godot/imported/roughness.png-8db90d670ae678b651ee6728ab1574b5.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

BIN
src/rectangletree.o Normal file

Binary file not shown.

Binary file not shown.

BIN
src/register_types.o Normal file

Binary file not shown.

Binary file not shown.

View File

@@ -1,6 +1,16 @@
#ifndef RTREE_H #ifndef RTREE_H
#define RTREE_H #define RTREE_H
#define _USE_MATH_DEFINES
#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif
#ifndef M_E
#define M_E 2.71828182845904523536
#endif
// NOTE This file compiles under MSVC 6 SP5 and MSVC .Net 2003 it may not work // NOTE This file compiles under MSVC 6 SP5 and MSVC .Net 2003 it may not work
// on other compilers without modification. // on other compilers without modification.

BIN
src/triangulization.o Normal file

Binary file not shown.

Binary file not shown.