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")
class_name FuncGodotEntityAssembler extends RefCounted
## Entity assembly class that is instantiated by a [FuncGodotMap] node.
const _SIGNATURE: String = "[ENT]"
# Namespacing
const _GroupData := FuncGodotData.GroupData
const _EntityData := FuncGodotData.EntityData
# Class members
## [FuncGodotMapSettings] provided by the [FuncGodotMap] during the build process.
var map_settings: FuncGodotMapSettings = null
## [enum FuncGodotMap.BuildFlags] that may affect the build process provided by the [FuncGodotMap].
var build_flags: int = 0
# Signals
## 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.
signal declare_step(step: String)
func _init(settings: FuncGodotMapSettings) -> void:
map_settings = settings
## 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:
if ResourceLoader.exists(name_of_class, "Script"):
return load(name_of_class) as Script
for global_class in ProjectSettings.get_global_class_list():
var found_name_of_class : String = global_class["class"]
var found_path : String = global_class["path"]
if found_name_of_class == name_of_class:
return load(found_path) as Script
return null
## 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:
var group_node := Node3D.new()
group_node.name = group_data.name
group_data.node = group_node
return group_node
## 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.
func generate_solid_entity_node(node: Node, node_name: String, data: _EntityData, definition: FuncGodotFGDSolidClass) -> Node:
if definition.spawn_type == FuncGodotFGDSolidClass.SpawnType.MERGE_WORLDSPAWN:
return null
if definition.node_class != "":
if ClassDB.class_exists(definition.node_class):
node = ClassDB.instantiate(definition.node_class)
else:
var script: Script = get_script_by_class_name(definition.node_class)
if script is GDScript:
node = (script as GDScript).new()
else:
node = Node3D.new()
node.name = node_name
node_name = node_name.trim_suffix(definition.classname).trim_suffix("_")
var properties: Dictionary = data.properties
# Mesh Instance generation
if data.mesh:
var mesh_instance := MeshInstance3D.new()
mesh_instance.name = node_name + "_mesh_instance"
mesh_instance.mesh = data.mesh
mesh_instance.gi_mode = GeometryInstance3D.GI_MODE_DISABLED
if definition.global_illumination_mode:
mesh_instance.gi_mode = definition.global_illumination_mode
mesh_instance.cast_shadow = definition.shadow_casting_setting
mesh_instance.layers = definition.render_layers
node.add_child(mesh_instance)
data.mesh_instance = mesh_instance
# Occluder generation
if definition.build_occlusion and data.mesh:
var verts: PackedVector3Array = []
var indices: PackedInt32Array = []
var index: int = 0
for surf_idx in range(data.mesh.get_surface_count()):
var vert_count: int = verts.size()
var surf_array: Array = data.mesh.surface_get_arrays(surf_idx)
verts.append_array(surf_array[Mesh.ARRAY_VERTEX])
indices.resize(indices.size() + surf_array[Mesh.ARRAY_INDEX].size())
for new_index in surf_array[Mesh.ARRAY_INDEX]:
indices[index] = (new_index + vert_count)
index += 1
var occluder := ArrayOccluder3D.new()
occluder.set_arrays(verts, indices)
var occluder_instance := OccluderInstance3D.new()
occluder_instance.name = node_name + "_occluder_instance"
occluder_instance.occluder = occluder
node.add_child(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):
mesh_instance.mesh = FuncGodotUtil.smooth_mesh_by_angle(data.mesh, data.get_smoothing_angle(map_settings.entity_smoothing_angle_property))
# Collision generation
if data.shapes.size() and node is CollisionObject3D:
node.collision_layer = definition.collision_layer
node.collision_mask = definition.collision_mask
node.collision_priority = definition.collision_priority
var shape_to_face_array : Array[PackedInt32Array] = []
if data.mesh_metadata.has('shape_to_face_array'):
shape_to_face_array = data.mesh_metadata['shape_to_face_array']
data.mesh_metadata.erase('shape_to_face_array')
# Generate CollisionShape3D nodes and apply shapes
var face_index_metadata : Dictionary[String, PackedInt32Array] = {}
for i in data.shapes.size():
var shape := data.shapes[i]
var collision_shape := CollisionShape3D.new()
if definition.collision_shape_type == FuncGodotFGDSolidClass.CollisionShapeType.CONCAVE:
collision_shape.name = node_name + "_collision_shape"
else:
collision_shape.name = node_name + "_brush_%s_collision_shape" % i
collision_shape.shape = shape
collision_shape.shape.margin = definition.collision_shape_margin
collision_shape.owner = node.owner
node.add_child(collision_shape)
data.collision_shapes.append(collision_shape)
if shape_to_face_array.size() > i:
face_index_metadata[collision_shape.name] = shape_to_face_array[i]
if definition.add_collision_shape_to_face_indices_metadata:
data.mesh_metadata['collision_shape_to_face_indices_map'] = face_index_metadata
if "position" in node:
if node.position is Vector3:
node.position = FuncGodotUtil.id_to_opengl(data.origin) * map_settings.scale_factor
if not data.mesh_metadata.is_empty():
node.set_meta("func_godot_mesh_data", data.mesh_metadata)
return node
## 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:
var classname: String = properties["classname"]
if definition.scene_file:
var flag: PackedScene.GenEditState = PackedScene.GEN_EDIT_STATE_DISABLED
if Engine.is_editor_hint():
flag = PackedScene.GEN_EDIT_STATE_INSTANCE
node = definition.scene_file.instantiate(flag)
elif definition.node_class != "":
if ClassDB.class_exists(definition.node_class):
node = ClassDB.instantiate(definition.node_class)
else:
var script: Script = get_script_by_class_name(definition.node_class)
if script is GDScript:
node = (script as GDScript).new()
else:
node = Node3D.new()
node.name = node_name
if "rotation_degrees" in node and definition.apply_rotation_on_map_build:
var angles := Vector3.ZERO
if "angles" in properties or "mangle" in properties:
var key := "angles" if "angles" in properties else "mangle"
var angles_raw = properties[key]
if not angles_raw is Vector3:
angles_raw = angles_raw.split_floats(' ')
if angles_raw.size() > 2:
angles = Vector3(-angles_raw[0], angles_raw[1], -angles_raw[2])
if key == "mangle":
if definition.classname.begins_with("light"):
angles = Vector3(angles_raw[1], angles_raw[0], -angles_raw[2])
elif definition.classname == "info_intermission":
angles = Vector3(angles_raw[0], angles_raw[1], -angles_raw[2])
else:
push_error("Invalid vector format for \"" + key + "\" in entity \"" + classname + "\"")
elif "angle" in properties:
var angle = properties["angle"]
if not angle is float:
angle = float(angle)
angles.y += angle
angles.y += 180
node.rotation_degrees = angles
if "scale" in node and definition.apply_scale_on_map_build:
if "scale" in properties:
var scale_prop: Variant = properties["scale"]
if typeof(scale_prop) == TYPE_STRING:
var scale_arr: PackedStringArray = (scale_prop as String).split(" ")
match scale_arr.size():
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())
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:
node.scale *= scale_prop as float
elif node.scale is Vector3:
if typeof(scale_prop) == TYPE_VECTOR3 or typeof(scale_prop) == TYPE_VECTOR3I:
node.scale *= scale_prop as Vector3
elif node.scale is Vector2:
if typeof(scale_prop) == TYPE_VECTOR2 or typeof(scale_prop) == TYPE_VECTOR2I:
node.scale *= scale_prop as Vector2
if "origin" in properties:
var origin_vec: Vector3 = Vector3.ZERO
var origin_comps: PackedFloat64Array = properties['origin'].split_floats(' ')
if origin_comps.size() > 2:
origin_vec = Vector3(origin_comps[1], origin_comps[2], origin_comps[0])
else:
push_error("Invalid vector format for \"origin\" in " + node_name)
if "position" in node:
if node.position is Vector3:
node.position = origin_vec * map_settings.scale_factor
elif node.position is Vector2:
node.position = Vector2(origin_vec.z, -origin_vec.y)
return node
## 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]
## 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:
var properties: Dictionary = data.properties
if data.definition:
var def := data.definition
for property in properties:
var prop_string = properties[property]
if property in def.class_properties:
var prop_default: Variant = def.class_properties[property]
match typeof(prop_default):
TYPE_INT:
properties[property] = prop_string.to_int()
TYPE_FLOAT:
properties[property] = prop_string.to_float()
TYPE_BOOL:
properties[property] = bool(prop_string.to_int())
TYPE_VECTOR3:
var prop_comps: PackedFloat64Array = prop_string.split_floats(" ")
if prop_comps.size() > 2:
properties[property] = Vector3(prop_comps[0], prop_comps[1], prop_comps[2])
else:
push_error("Invalid Vector3 format for \'" + property + "\' in entity \'" + def.classname + "\': " + prop_string)
properties[property] = prop_default
TYPE_VECTOR3I:
var prop_vec: Vector3i = prop_default
var prop_comps: PackedStringArray = prop_string.split(" ")
if prop_comps.size() > 2:
for i in 3:
prop_vec[i] = prop_comps[i].to_int()
else:
push_error("Invalid Vector3i format for \'" + property + "\' in entity \'" + def.classname + "\': " + prop_string)
properties[property] = prop_vec
TYPE_COLOR:
var prop_color: Color = prop_default
var prop_comps: PackedStringArray = prop_string.split(" ")
if prop_comps.size() > 2:
prop_color.r8 = prop_comps[0].to_int()
prop_color.g8 = prop_comps[1].to_int()
prop_color.b8 = prop_comps[2].to_int()
prop_color.a = 1.0
else:
push_error("Invalid Color format for \'" + property + "\' in entity \'" + def.classname + "\': " + prop_string)
properties[property] = prop_color
TYPE_DICTIONARY:
var prop_desc = def.class_property_descriptions[property]
if prop_desc is Array and prop_desc.size() > 1 and prop_desc[1] is int:
properties[property] = prop_string.to_int()
TYPE_ARRAY:
properties[property] = prop_string.to_int()
TYPE_VECTOR2:
var prop_comps: PackedFloat64Array = prop_string.split_floats(" ")
if prop_comps.size() > 1:
properties[property] = Vector2(prop_comps[0], prop_comps[1])
else:
push_error("Invalid Vector2 format for \'" + property + "\' in entity \'" + def.classname + "\': " + prop_string)
properties[property] = prop_default
TYPE_VECTOR2I:
var prop_vec: Vector2i = prop_default
var prop_comps: PackedStringArray = prop_string.split(" ")
if prop_comps.size() > 1:
for i in 2:
prop_vec[i] = prop_comps[i].to_int()
else:
push_error("Invalid Vector2i format for \'" + property + "\' in entity \'" + def.classname + "\': " + prop_string)
properties[property] = prop_vec
TYPE_VECTOR4:
var prop_comps: PackedFloat64Array = prop_string.split_floats(" ")
if prop_comps.size() > 3:
properties[property] = Vector4(prop_comps[0], prop_comps[1], prop_comps[2], prop_comps[3])
else:
push_error("Invalid Vector4 format for \'" + property + "\' in entity \'" + def.classname + "\': " + prop_string)
properties[property] = prop_default
TYPE_VECTOR4I:
var prop_vec: Vector4i = prop_default
var prop_comps: PackedStringArray = prop_string.split(" ")
if prop_comps.size() > 3:
for i in 4:
prop_vec[i] = prop_comps[i].to_int()
else:
push_error("Invalid Vector4i format for \'" + property + "\' in entity \'" + def.classname + "\': " + prop_string)
properties[property] = prop_vec
TYPE_STRING_NAME:
properties[property] = StringName(prop_string)
TYPE_NODE_PATH:
properties[property] = prop_string
TYPE_OBJECT:
properties[property] = prop_string
# Assign properties not defined with defaults from the entity definition
for property in def.class_properties:
if not property in properties:
var prop_default: Variant = def.class_properties[property]
# Flags
if prop_default is Array:
var prop_flags_sum := 0
for prop_flag in prop_default:
if prop_flag is Array and prop_flag.size() > 2:
if prop_flag[2] and prop_flag[1] is int:
prop_flags_sum += prop_flag[1]
properties[property] = prop_flags_sum
# Choices
elif prop_default is Dictionary:
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):
properties[property] = prop_desc[1]
elif prop_default.size():
properties[property] = prop_default[prop_default.keys().front()]
else:
properties[property] = 0
# Materials, Shaders, and Sounds
elif prop_default is Resource:
properties[property] = prop_default.resource_path
# Target Destination and Target Source
elif prop_default is NodePath or prop_default is Object or prop_default == null:
properties[property] = ""
# Everything else
else:
properties[property] = prop_default
if def.auto_apply_to_matching_node_properties:
for property in properties:
if property in node:
if typeof(node.get(property)) == typeof(properties[property]):
node.set(property, properties[property])
else:
push_error("Entity %s property \'%s\' type mismatch with matching generated node property." % [node.name, property])
if "func_godot_properties" in node:
node.func_godot_properties = properties
if node.has_method("_func_godot_apply_properties"):
node.call("_func_godot_apply_properties", properties)
if node.has_method("_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],
## in the case of [FuncGodotFGDSolidClass] entities with no [FuncGodotData.BrushData] entries.
func generate_entity_node(entity_data: _EntityData, entity_index: int) -> Node:
var node: Node = null
var node_name: String = "entity_%s" % entity_index
var properties: Dictionary = entity_data.properties
var entity_def: FuncGodotFGDEntityClass = entity_data.definition
if "classname" in entity_data.properties:
var classname: String = properties["classname"]
node_name += "_" + properties["classname"]
var default_point_def := FuncGodotFGDPointClass.new()
var default_solid_def := FuncGodotFGDSolidClass.new()
default_solid_def.collision_shape_type = FuncGodotFGDSolidClass.CollisionShapeType.NONE
if entity_def:
var name_prop: String
if entity_def.name_property in properties:
name_prop = str(properties[entity_def.name_property])
elif map_settings.entity_name_property in properties:
name_prop = str(properties[map_settings.entity_name_property])
if not name_prop.is_empty():
node_name = "entity_" + name_prop
if entity_def is FuncGodotFGDSolidClass:
node = generate_solid_entity_node(node, node_name, entity_data, entity_def)
elif entity_def is FuncGodotFGDPointClass:
node = generate_point_entity_node(node, node_name, properties, entity_def)
else:
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)
if node and entity_def.script_class:
node.set_script(entity_def.script_class)
else:
push_error("No entity definition found for \"" + node_name + "\"")
if entity_data.brushes.size():
node = generate_solid_entity_node(node, node_name, entity_data, default_solid_def)
else:
node = generate_point_entity_node(node, node_name, properties, default_point_def)
return node
## 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].
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
build_flags = map_node.build_flags
if map_settings.use_groups_hierarchy:
declare_step.emit("Generating %s groups" % groups.size())
# Generate group nodes
for group in groups:
group.node = generate_group_node(group)
# Sort hierarchy and add them to the map
for group in groups:
if group.parent_id < 0:
map_node.add_child(group.node)
group.node.owner = scene_root
else:
for parent in groups:
if group.parent_id == parent.id:
parent.node.add_child(group.node)
group.node.owner = scene_root
declare_step.emit("Groups generation and sorting complete")
declare_step.emit("Assembling %s entities" % entities.size())
var entity_node: Node = null
for entity_index in entities.size():
var entity_data : _EntityData = entities[entity_index]
entity_node = generate_entity_node(entity_data, entity_index)
if entity_node:
if not map_settings.use_groups_hierarchy or not entity_data.group:
map_node.add_child(entity_node)
if entity_index == 0:
map_node.move_child(entity_node, 0)
elif map_settings.use_groups_hierarchy:
for group in groups:
if entity_data.group.id == group.id:
group.node.add_child(entity_node)
entity_node.owner = scene_root
if entity_data.mesh_instance:
entity_data.mesh_instance.owner = scene_root
for shape in entity_data.collision_shapes:
if shape:
shape.owner = scene_root
if entity_data.occluder_instance:
entity_data.occluder_instance.owner = scene_root
apply_entity_properties(entity_node, entity_data)
declare_step.emit("Entity assembly and property application complete")
@icon("res://addons/func_godot/icons/icon_godot_ranger.svg")
class_name FuncGodotEntityAssembler extends RefCounted
## Entity assembly class that is instantiated by a [FuncGodotMap] node.
const _SIGNATURE: String = "[ENT]"
# Namespacing
const _GroupData := FuncGodotData.GroupData
const _EntityData := FuncGodotData.EntityData
# Class members
## [FuncGodotMapSettings] provided by the [FuncGodotMap] during the build process.
var map_settings: FuncGodotMapSettings = null
## [enum FuncGodotMap.BuildFlags] that may affect the build process provided by the [FuncGodotMap].
var build_flags: int = 0
# Signals
## 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.
signal declare_step(step: String)
func _init(settings: FuncGodotMapSettings) -> void:
map_settings = settings
## 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:
if ResourceLoader.exists(name_of_class, "Script"):
return load(name_of_class) as Script
for global_class in ProjectSettings.get_global_class_list():
var found_name_of_class : String = global_class["class"]
var found_path : String = global_class["path"]
if found_name_of_class == name_of_class:
return load(found_path) as Script
return null
## 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:
var group_node := Node3D.new()
group_node.name = group_data.name
group_data.node = group_node
return group_node
## 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.
func generate_solid_entity_node(node: Node, node_name: String, data: _EntityData, definition: FuncGodotFGDSolidClass) -> Node:
if definition.spawn_type == FuncGodotFGDSolidClass.SpawnType.MERGE_WORLDSPAWN:
return null
if definition.node_class != "":
if ClassDB.class_exists(definition.node_class):
node = ClassDB.instantiate(definition.node_class)
else:
var script: Script = get_script_by_class_name(definition.node_class)
if script is GDScript:
node = (script as GDScript).new()
else:
node = Node3D.new()
node.name = node_name
node_name = node_name.trim_suffix(definition.classname).trim_suffix("_")
var properties: Dictionary = data.properties
# Mesh Instance generation
if data.mesh:
var mesh_instance := MeshInstance3D.new()
mesh_instance.name = node_name + "_mesh_instance"
mesh_instance.mesh = data.mesh
mesh_instance.gi_mode = GeometryInstance3D.GI_MODE_DISABLED
if definition.global_illumination_mode:
mesh_instance.gi_mode = definition.global_illumination_mode
mesh_instance.cast_shadow = definition.shadow_casting_setting
mesh_instance.layers = definition.render_layers
node.add_child(mesh_instance)
data.mesh_instance = mesh_instance
# Occluder generation
if definition.build_occlusion and data.mesh:
var verts: PackedVector3Array = []
var indices: PackedInt32Array = []
var index: int = 0
for surf_idx in range(data.mesh.get_surface_count()):
var vert_count: int = verts.size()
var surf_array: Array = data.mesh.surface_get_arrays(surf_idx)
verts.append_array(surf_array[Mesh.ARRAY_VERTEX])
indices.resize(indices.size() + surf_array[Mesh.ARRAY_INDEX].size())
for new_index in surf_array[Mesh.ARRAY_INDEX]:
indices[index] = (new_index + vert_count)
index += 1
var occluder := ArrayOccluder3D.new()
occluder.set_arrays(verts, indices)
var occluder_instance := OccluderInstance3D.new()
occluder_instance.name = node_name + "_occluder_instance"
occluder_instance.occluder = occluder
node.add_child(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):
mesh_instance.mesh = FuncGodotUtil.smooth_mesh_by_angle(data.mesh, data.get_smoothing_angle(map_settings.entity_smoothing_angle_property))
# Collision generation
if data.shapes.size() and node is CollisionObject3D:
node.collision_layer = definition.collision_layer
node.collision_mask = definition.collision_mask
node.collision_priority = definition.collision_priority
var shape_to_face_array : Array[PackedInt32Array] = []
if data.mesh_metadata.has('shape_to_face_array'):
shape_to_face_array = data.mesh_metadata['shape_to_face_array']
data.mesh_metadata.erase('shape_to_face_array')
# Generate CollisionShape3D nodes and apply shapes
var face_index_metadata : Dictionary[String, PackedInt32Array] = {}
for i in data.shapes.size():
var shape := data.shapes[i]
var collision_shape := CollisionShape3D.new()
if definition.collision_shape_type == FuncGodotFGDSolidClass.CollisionShapeType.CONCAVE:
collision_shape.name = node_name + "_collision_shape"
else:
collision_shape.name = node_name + "_brush_%s_collision_shape" % i
collision_shape.shape = shape
collision_shape.shape.margin = definition.collision_shape_margin
collision_shape.owner = node.owner
node.add_child(collision_shape)
data.collision_shapes.append(collision_shape)
if shape_to_face_array.size() > i:
face_index_metadata[collision_shape.name] = shape_to_face_array[i]
if definition.add_collision_shape_to_face_indices_metadata:
data.mesh_metadata['collision_shape_to_face_indices_map'] = face_index_metadata
if "position" in node:
if node.position is Vector3:
node.position = FuncGodotUtil.id_to_opengl(data.origin) * map_settings.scale_factor
if not data.mesh_metadata.is_empty():
node.set_meta("func_godot_mesh_data", data.mesh_metadata)
return node
## 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:
var classname: String = properties["classname"]
if definition.scene_file:
var flag: PackedScene.GenEditState = PackedScene.GEN_EDIT_STATE_DISABLED
if Engine.is_editor_hint():
flag = PackedScene.GEN_EDIT_STATE_INSTANCE
node = definition.scene_file.instantiate(flag)
elif definition.node_class != "":
if ClassDB.class_exists(definition.node_class):
node = ClassDB.instantiate(definition.node_class)
else:
var script: Script = get_script_by_class_name(definition.node_class)
if script is GDScript:
node = (script as GDScript).new()
else:
node = Node3D.new()
node.name = node_name
if "rotation_degrees" in node and definition.apply_rotation_on_map_build:
var angles := Vector3.ZERO
if "angles" in properties or "mangle" in properties:
var key := "angles" if "angles" in properties else "mangle"
var angles_raw = properties[key]
if not angles_raw is Vector3:
angles_raw = angles_raw.split_floats(' ')
if angles_raw.size() > 2:
angles = Vector3(-angles_raw[0], angles_raw[1], -angles_raw[2])
if key == "mangle":
if definition.classname.begins_with("light"):
angles = Vector3(angles_raw[1], angles_raw[0], -angles_raw[2])
elif definition.classname == "info_intermission":
angles = Vector3(angles_raw[0], angles_raw[1], -angles_raw[2])
else:
push_error("Invalid vector format for \"" + key + "\" in entity \"" + classname + "\"")
elif "angle" in properties:
var angle = properties["angle"]
if not angle is float:
angle = float(angle)
angles.y += angle
angles.y += 180
node.rotation_degrees = angles
if "scale" in node and definition.apply_scale_on_map_build:
if "scale" in properties:
var scale_prop: Variant = properties["scale"]
if typeof(scale_prop) == TYPE_STRING:
var scale_arr: PackedStringArray = (scale_prop as String).split(" ")
match scale_arr.size():
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())
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:
node.scale *= scale_prop as float
elif node.scale is Vector3:
if typeof(scale_prop) == TYPE_VECTOR3 or typeof(scale_prop) == TYPE_VECTOR3I:
node.scale *= scale_prop as Vector3
elif node.scale is Vector2:
if typeof(scale_prop) == TYPE_VECTOR2 or typeof(scale_prop) == TYPE_VECTOR2I:
node.scale *= scale_prop as Vector2
if "origin" in properties:
var origin_vec: Vector3 = Vector3.ZERO
var origin_comps: PackedFloat64Array = properties['origin'].split_floats(' ')
if origin_comps.size() > 2:
origin_vec = Vector3(origin_comps[1], origin_comps[2], origin_comps[0])
else:
push_error("Invalid vector format for \"origin\" in " + node_name)
if "position" in node:
if node.position is Vector3:
node.position = origin_vec * map_settings.scale_factor
elif node.position is Vector2:
node.position = Vector2(origin_vec.z, -origin_vec.y)
return node
## 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]
## 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:
var properties: Dictionary = data.properties
if data.definition:
var def := data.definition
for property in properties:
var prop_string = properties[property]
if property in def.class_properties:
var prop_default: Variant = def.class_properties[property]
match typeof(prop_default):
TYPE_INT:
properties[property] = prop_string.to_int()
TYPE_FLOAT:
properties[property] = prop_string.to_float()
TYPE_BOOL:
properties[property] = bool(prop_string.to_int())
TYPE_VECTOR3:
var prop_comps: PackedFloat64Array = prop_string.split_floats(" ")
if prop_comps.size() > 2:
properties[property] = Vector3(prop_comps[0], prop_comps[1], prop_comps[2])
else:
push_error("Invalid Vector3 format for \'" + property + "\' in entity \'" + def.classname + "\': " + prop_string)
properties[property] = prop_default
TYPE_VECTOR3I:
var prop_vec: Vector3i = prop_default
var prop_comps: PackedStringArray = prop_string.split(" ")
if prop_comps.size() > 2:
for i in 3:
prop_vec[i] = prop_comps[i].to_int()
else:
push_error("Invalid Vector3i format for \'" + property + "\' in entity \'" + def.classname + "\': " + prop_string)
properties[property] = prop_vec
TYPE_COLOR:
var prop_color: Color = prop_default
var prop_comps: PackedStringArray = prop_string.split(" ")
if prop_comps.size() > 2:
prop_color.r8 = prop_comps[0].to_int()
prop_color.g8 = prop_comps[1].to_int()
prop_color.b8 = prop_comps[2].to_int()
prop_color.a = 1.0
else:
push_error("Invalid Color format for \'" + property + "\' in entity \'" + def.classname + "\': " + prop_string)
properties[property] = prop_color
TYPE_DICTIONARY:
var prop_desc = def.class_property_descriptions[property]
if prop_desc is Array and prop_desc.size() > 1 and prop_desc[1] is int:
properties[property] = prop_string.to_int()
TYPE_ARRAY:
properties[property] = prop_string.to_int()
TYPE_VECTOR2:
var prop_comps: PackedFloat64Array = prop_string.split_floats(" ")
if prop_comps.size() > 1:
properties[property] = Vector2(prop_comps[0], prop_comps[1])
else:
push_error("Invalid Vector2 format for \'" + property + "\' in entity \'" + def.classname + "\': " + prop_string)
properties[property] = prop_default
TYPE_VECTOR2I:
var prop_vec: Vector2i = prop_default
var prop_comps: PackedStringArray = prop_string.split(" ")
if prop_comps.size() > 1:
for i in 2:
prop_vec[i] = prop_comps[i].to_int()
else:
push_error("Invalid Vector2i format for \'" + property + "\' in entity \'" + def.classname + "\': " + prop_string)
properties[property] = prop_vec
TYPE_VECTOR4:
var prop_comps: PackedFloat64Array = prop_string.split_floats(" ")
if prop_comps.size() > 3:
properties[property] = Vector4(prop_comps[0], prop_comps[1], prop_comps[2], prop_comps[3])
else:
push_error("Invalid Vector4 format for \'" + property + "\' in entity \'" + def.classname + "\': " + prop_string)
properties[property] = prop_default
TYPE_VECTOR4I:
var prop_vec: Vector4i = prop_default
var prop_comps: PackedStringArray = prop_string.split(" ")
if prop_comps.size() > 3:
for i in 4:
prop_vec[i] = prop_comps[i].to_int()
else:
push_error("Invalid Vector4i format for \'" + property + "\' in entity \'" + def.classname + "\': " + prop_string)
properties[property] = prop_vec
TYPE_STRING_NAME:
properties[property] = StringName(prop_string)
TYPE_NODE_PATH:
properties[property] = prop_string
TYPE_OBJECT:
properties[property] = prop_string
# Assign properties not defined with defaults from the entity definition
for property in def.class_properties:
if not property in properties:
var prop_default: Variant = def.class_properties[property]
# Flags
if prop_default is Array:
var prop_flags_sum := 0
for prop_flag in prop_default:
if prop_flag is Array and prop_flag.size() > 2:
if prop_flag[2] and prop_flag[1] is int:
prop_flags_sum += prop_flag[1]
properties[property] = prop_flags_sum
# Choices
elif prop_default is Dictionary:
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):
properties[property] = prop_desc[1]
elif prop_default.size():
properties[property] = prop_default[prop_default.keys().front()]
else:
properties[property] = 0
# Materials, Shaders, and Sounds
elif prop_default is Resource:
properties[property] = prop_default.resource_path
# Target Destination and Target Source
elif prop_default is NodePath or prop_default is Object or prop_default == null:
properties[property] = ""
# Everything else
else:
properties[property] = prop_default
if def.auto_apply_to_matching_node_properties:
for property in properties:
if property in node:
if typeof(node.get(property)) == typeof(properties[property]):
node.set(property, properties[property])
else:
push_error("Entity %s property \'%s\' type mismatch with matching generated node property." % [node.name, property])
if "func_godot_properties" in node:
node.func_godot_properties = properties
if node.has_method("_func_godot_apply_properties"):
node.call("_func_godot_apply_properties", properties)
if node.has_method("_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],
## in the case of [FuncGodotFGDSolidClass] entities with no [FuncGodotData.BrushData] entries.
func generate_entity_node(entity_data: _EntityData, entity_index: int) -> Node:
var node: Node = null
var node_name: String = "entity_%s" % entity_index
var properties: Dictionary = entity_data.properties
var entity_def: FuncGodotFGDEntityClass = entity_data.definition
if "classname" in entity_data.properties:
var classname: String = properties["classname"]
node_name += "_" + properties["classname"]
var default_point_def := FuncGodotFGDPointClass.new()
var default_solid_def := FuncGodotFGDSolidClass.new()
default_solid_def.collision_shape_type = FuncGodotFGDSolidClass.CollisionShapeType.NONE
if entity_def:
var name_prop: String
if entity_def.name_property in properties:
name_prop = str(properties[entity_def.name_property])
elif map_settings.entity_name_property in properties:
name_prop = str(properties[map_settings.entity_name_property])
if not name_prop.is_empty():
node_name = "entity_" + name_prop
if entity_def is FuncGodotFGDSolidClass:
node = generate_solid_entity_node(node, node_name, entity_data, entity_def)
elif entity_def is FuncGodotFGDPointClass:
node = generate_point_entity_node(node, node_name, properties, entity_def)
else:
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)
if node and entity_def.script_class:
node.set_script(entity_def.script_class)
else:
push_error("No entity definition found for \"" + node_name + "\"")
if entity_data.brushes.size():
node = generate_solid_entity_node(node, node_name, entity_data, default_solid_def)
else:
node = generate_point_entity_node(node, node_name, properties, default_point_def)
return node
## 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].
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
build_flags = map_node.build_flags
if map_settings.use_groups_hierarchy:
declare_step.emit("Generating %s groups" % groups.size())
# Generate group nodes
for group in groups:
group.node = generate_group_node(group)
# Sort hierarchy and add them to the map
for group in groups:
if group.parent_id < 0:
map_node.add_child(group.node)
group.node.owner = scene_root
else:
for parent in groups:
if group.parent_id == parent.id:
parent.node.add_child(group.node)
group.node.owner = scene_root
declare_step.emit("Groups generation and sorting complete")
declare_step.emit("Assembling %s entities" % entities.size())
var entity_node: Node = null
for entity_index in entities.size():
var entity_data : _EntityData = entities[entity_index]
entity_node = generate_entity_node(entity_data, entity_index)
if entity_node:
if not map_settings.use_groups_hierarchy or not entity_data.group:
map_node.add_child(entity_node)
if entity_index == 0:
map_node.move_child(entity_node, 0)
elif map_settings.use_groups_hierarchy:
for group in groups:
if entity_data.group.id == group.id:
group.node.add_child(entity_node)
entity_node.owner = scene_root
if entity_data.mesh_instance:
entity_data.mesh_instance.owner = scene_root
for shape in entity_data.collision_shapes:
if shape:
shape.owner = scene_root
if entity_data.occluder_instance:
entity_data.occluder_instance.owner = scene_root
apply_entity_properties(entity_node, entity_data)
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 texture_names_metadata: Array[StringName] = []
var textures_metadata: PackedInt32Array = []
var uv_metadata: PackedVector2Array = []
var vertices_metadata: PackedVector3Array = []
var normals_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
var index_offset: int = 0
for face in faces:
# 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))
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
for i in face.vertices.size():
# 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
if def.add_face_position_metadata:
entity.mesh_metadata["positions"] = positions_metadata
entity.mesh_metadata["uvs"] = uv_metadata
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 meshInstance3d: MeshInstance3D
@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 var extrusion_direction: ExtrudeDirection
@export var hole_proximity: float
@@ -28,7 +30,6 @@ var static_body: StaticBody3D
func _ready() -> void:
if Engine.is_editor_hint():
return
parentNode = get_node("..")
inner_polygons = Holes.new()
inner_rtree = RectangleTree.new()
@@ -43,6 +44,9 @@ func _exit_tree() -> void:
func _func_godot_apply_properties(entity_properties: Dictionary) -> void:
meshInstance3d = _find_mesh_body()
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"]
hole_proximity = entity_properties["hole_proximity"]
@@ -63,8 +67,6 @@ func _func_godot_apply_properties(entity_properties: Dictionary) -> void:
elif d < depth_min:
depth_min = d
depth = -(abs(depth_min) + abs(depth_max))
depth_position_offset = Vector3.BACK * (depth/2)
elif extrusion_direction == ExtrudeDirection.RIGHT:
for vert in verticies:
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:
depth_min = d
depth = -(abs(depth_min) + abs(depth_max))
depth_position_offset = Vector3.RIGHT * (depth/2)
elif extrusion_direction == ExtrudeDirection.UP:
for vert in verticies:
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:
depth_min = d
depth = -(abs(depth_min) + abs(depth_max))
depth_position_offset = Vector3.UP * (depth/2)
var outer_boudary = Geometry2D.convex_hull(verts_2d)
verts2d = outer_boudary
@@ -102,12 +100,11 @@ func _draw():
vectors.append_array(outer_polygon)
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))
meshGenerator.free()
meshInstance3d.mesh = commited_mesh
meshInstance3d.position += depth_position_offset
meshInstance3d.create_trimesh_collision()
static_body = _find_static_body()
@@ -131,7 +128,7 @@ func _deffered_draw(mesh: Mesh, task_id: int):
static_body = _find_static_body()
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))
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 array_mesh = ArrayMesh.new()
var original_face_data: Faces
var _v_indexes = []
var _v_points = []
@@ -17,24 +19,25 @@ var edges = {}
var depth_vector: Vector3
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")
surface_array.resize(Mesh.ARRAY_MAX)
original_face_data = Faces.new(original_vectors, original_uvs, original_normals)
self._v_indexes = vector_indexes
self.extrude_direction = extrude_direction
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
elif extrude_direction == DestructableWall.ExtrudeDirection.RIGHT:
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
for point in vector_points:
self._v_points.append(Vector3(depth/2, point.y, point.x))
elif extrude_direction == DestructableWall.ExtrudeDirection.UP:
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
@@ -71,6 +74,38 @@ func _pre_process_edges():
else:
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():
var unvisted_edges = self.get_outline_edge()
var loops = []
@@ -167,34 +202,16 @@ func _draw_sides():
var n1 = self._calc_triangle_normal(v2, v1, v0)
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])
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):
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)])
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)])
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
var uv0 = self._new_interpolated_uv_point(v0, normal)
var uv1 = self._new_interpolated_uv_point(v1, normal)
var uv2 = self._new_interpolated_uv_point(v2, normal)
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
func _draw_mesh():
@@ -204,10 +221,9 @@ func _draw_mesh():
var normal = self._calc_triangle_normal(vector3C, vector3B, vector3A)
self.verts.append_array([vector3A, vector3B, vector3C])
_append_uvs3(vector3A, vector3B, vector3C, normal)
self.normals.append_array([normal, normal, normal])
# 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://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://04ag2c3lcicg" path="res://assets/models/soup_can/soup_can.glb" id="4_qd0o6"]
[sub_resource type="Animation" id="Animation_q6206"]
resource_name = "Camera_Pan"
@@ -96,3 +97,6 @@ libraries = {
}
autoplay = "Camera_Pan"
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="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 = [{
"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/"),
@@ -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////+/")
}]
[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)
[sub_resource type="ArrayMesh" id="ArrayMesh_qhvcx"]
[sub_resource type="ArrayMesh" id="ArrayMesh_kqvnf"]
_surfaces = [{
"aabb": AABB(-7, -0.50006104, -5.75, 14, 1.0001221, 11.5),
"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////+/")
}]
[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)
[sub_resource type="ArrayMesh" id="ArrayMesh_eudka"]
_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"]
[sub_resource type="ArrayMesh" id="ArrayMesh_rmkky"]
_surfaces = [{
"aabb": AABB(-1.546875, -0.25, -2, 3.09375, 0.5, 4),
"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/")
}]
[sub_resource type="ArrayMesh" id="ArrayMesh_rmkky"]
[sub_resource type="ArrayMesh" id="ArrayMesh_lqn8c"]
_surfaces = [{
"aabb": AABB(-1.046875, -1.5, -0.5, 2.09375, 3, 1),
"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/")
}]
[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 = [{
"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,
"index_count": 36,
"index_data": PackedByteArray("AAABAAIAAAACAAMABAAFAAYABAAGAAcACAAJAAoACAAKAAsADAANAA4ADAAOAA8AEAARABIAEAASABMAFAAVABYAFAAWABcA"),
@@ -116,38 +93,15 @@ _surfaces = [{
"primitive": 3,
"uv_scale": Vector4(0, 0, 0, 0),
"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"]
_surfaces = [{
"aabb": AABB(-1.0000001, -0.50000006, -0.7500305, 2, 1, 1.500061),
"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="ArrayOccluder3D" id="ArrayOccluder3D_u1nm5"]
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)
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="ArrayMesh" id="ArrayMesh_08uri"]
_surfaces = [{
"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/")
}]
[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_1w0m8"]
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)
[node name="Test" type="Node3D"]
@@ -159,49 +113,28 @@ metadata/_custom_type_script = "uid://cwu5cf7a0awcd"
[node name="entity_0_worldspawn" type="StaticBody3D" parent="FuncGodotMap"]
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"]
mesh = SubResource("ArrayMesh_u45fp")
mesh = SubResource("ArrayMesh_2grjb")
[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"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -6.1035156e-05, 14.25)
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"]
mesh = SubResource("ArrayMesh_qhvcx")
mesh = SubResource("ArrayMesh_kqvnf")
[node name="entity_1_brush_0_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_1_func_movingplatform"]
shape = SubResource("ConvexPolygonShape3D_kqvnf")
[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")
shape = SubResource("ConvexPolygonShape3D_eudka")
[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)
@@ -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)
meshInstance3d = NodePath("entity_4_mesh_instance")
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
hole_proximity = 1.0
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"]
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")
[node name="entity_6_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.546875)
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_6_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_6_func_geo" type="StaticBody3D" parent="FuncGodotMap"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.953125, 2, 2.5)
collision_mask = 0
metadata/func_godot_mesh_data = {
"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)
}
[node name="entity_6_mesh_instance" type="MeshInstance3D" parent="FuncGodotMap/entity_6_func_destructablewall"]
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"]
[node name="entity_6_mesh_instance" type="MeshInstance3D" parent="FuncGodotMap/entity_6_func_geo"]
mesh = SubResource("ArrayMesh_lqn8c")
[node name="entity_8_func_destructablewall" type="Node3D" parent="FuncGodotMap" node_paths=PackedStringArray("meshInstance3d")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.546875, 2, 4.015625)
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_6_occluder_instance" type="OccluderInstance3D" parent="FuncGodotMap/entity_6_func_geo"]
occluder = SubResource("ArrayOccluder3D_08uri")
[node name="entity_8_mesh_instance" type="MeshInstance3D" parent="FuncGodotMap/entity_8_func_destructablewall"]
mesh = SubResource("ArrayMesh_08uri")
[node name="entity_6_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_6_func_geo"]
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="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")]

View File

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

View File

@@ -1,176 +1,130 @@
// Game: demo
// Format: Valve
// entity 0
{
"mapversion" "220"
"wad" ""
"classname" "worldspawn"
"_tb_mod" "trenchbroom"
}
// entity 1
{
"classname" "func_group"
"_tb_type" "_tb_group"
"_tb_name" "floor"
"_tb_id" "1"
"_tb_linked_group_id" "{fbbc3a97-f5d3-443e-97e2-242861ee6c78}"
"_tb_transformation" "1 0 0 -144 0 1 0 -144 0 0 1 0 0 0 0 1"
// brush 0
{
( 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
( 272 -512 -16 ) ( 274.125 -512 -16 ) ( 272 -510 -16 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 -0.5 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
( 544 -256 16 ) ( 546.125 -256 16 ) ( 544 -256 17 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 544 -256 16 ) ( 544 -256 17 ) ( 544 -254 16 ) tile191 [ 0 0.5 0 0 ] [ 0 0 -1 0 ] 0 1 1
}
// brush 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
( 0 -512 -16 ) ( 2.125 -512 -16 ) ( 0 -510 -16 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 -0.5 0 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
( 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
}
// brush 2
{
( -272 -512 -16 ) ( -272 -510 -16 ) ( -272 -512 -15 ) tile191 [ 0 -0.5 0 0 ] [ 0 0 -1 0 ] 90 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
( -272 -512 -16 ) ( -269.875 -512 -16 ) ( -272 -510 -16 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 90 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 -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
}
// brush 3
{
( -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
( -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
( -272 -256 16 ) ( -269.875 -256 16 ) ( -272 -256 17 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 90 1 1
( -272 -256 16 ) ( -272 -256 17 ) ( -272 -254 16 ) tile191 [ 0 0.5 0 0 ] [ 0 0 -1 0 ] 90 1 1
}
// brush 4
{
( -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
( -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
( -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
}
// brush 5
{
( -272 -256 -16 ) ( -272 -254 -16 ) ( -272 -256 -15 ) tile191 [ 0 -0.5 0 0 ] [ 0 0 -1 0 ] 270 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
( -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
( 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
}
// brush 6
{
( 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
( 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
( 272 0 16 ) ( 272 0 17 ) ( 272 2 16 ) tile191 [ 0 0.5 0 0 ] [ 0 0 -1 0 ] 180 1 1
}
// brush 7
{
( 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
( 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
( 544 0 16 ) ( 544 0 17 ) ( 544 2 16 ) tile191 [ 0 0.5 0 0 ] [ 0 0 -1 0 ] 180 1 1
}
// brush 8
{
( 0 0 -16 ) ( 0 2 -16 ) ( 0 0 -15 ) tile191 [ 0 -0.5 0 0 ] [ 0 0 -1 0 ] 270 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 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
( 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
}
// brush 9
{
( -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
( 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
( 0 256 16 ) ( 0 256 17 ) ( 0 258 16 ) tile191 [ 0 0.5 0 0 ] [ 0 0 -1 0 ] 270 1 1
}
// brush 10
{
( -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
( -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
( -272 256 16 ) ( -272 256 17 ) ( -272 258 16 ) tile191 [ 0 0.5 0 0 ] [ 0 0 -1 0 ] 270 1 1
}
// brush 11
{
( 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
( 272 0 -16 ) ( 274.125 0 -16 ) ( 272 2 -16 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 270 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
( 544 256 16 ) ( 546.125 256 16 ) ( 544 256 17 ) tile191 [ -0.47058823529411775 0 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
}
// brush 12
{
( 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
( 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
}
}
// 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 -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
( -144 -96 16 ) ( -144 -97 16 ) ( -143 -96 16 ) tile000 [ -1 0 0 0 ] [ -0 -1 -0 0 ] 0 1 1
( -64 -176 112 ) ( -63 -176 112 ) ( -64 -177 112 ) tile000 [ 1 -0 0 0 ] [ -0 -1 0 0 ] 0 1 1
( -144 -128 16 ) ( -143 -128 16 ) ( -144 -128 17 ) tile000 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -13 -176 32 ) ( -13 -177 32 ) ( -13 -176 33 ) tile000 [ -0 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
{
( -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

@@ -1,153 +1,130 @@
// Game: demo
// Format: Valve
// entity 0
{
"mapversion" "220"
"wad" ""
"classname" "worldspawn"
"_tb_mod" "trenchbroom"
// brush 0
{
( 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
( 272 -512 -16 ) ( 274.125 -512 -16 ) ( 272 -510 -16 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 -0.5 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
( 544 -256 16 ) ( 546.125 -256 16 ) ( 544 -256 17 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 544 -256 16 ) ( 544 -256 17 ) ( 544 -254 16 ) tile191 [ 0 0.5 0 0 ] [ 0 0 -1 0 ] 0 1 1
}
// brush 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
( 0 -512 -16 ) ( 2.125 -512 -16 ) ( 0 -510 -16 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 -0.5 0 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
( 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
}
// brush 2
{
( -272 -512 -16 ) ( -272 -510 -16 ) ( -272 -512 -15 ) tile191 [ 0 -0.5 0 0 ] [ 0 0 -1 0 ] 90 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
( -272 -512 -16 ) ( -269.875 -512 -16 ) ( -272 -510 -16 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 90 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 -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
}
// brush 3
{
( -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
( -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
( -272 -256 16 ) ( -269.875 -256 16 ) ( -272 -256 17 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 0 -1 0 ] 90 1 1
( -272 -256 16 ) ( -272 -256 17 ) ( -272 -254 16 ) tile191 [ 0 0.5 0 0 ] [ 0 0 -1 0 ] 90 1 1
}
// brush 4
{
( -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
( -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
( -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
}
// brush 5
{
( -272 -256 -16 ) ( -272 -254 -16 ) ( -272 -256 -15 ) tile191 [ 0 -0.5 0 0 ] [ 0 0 -1 0 ] 270 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
( -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
( 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
}
// brush 6
{
( 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
( 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
( 272 0 16 ) ( 272 0 17 ) ( 272 2 16 ) tile191 [ 0 0.5 0 0 ] [ 0 0 -1 0 ] 180 1 1
}
// brush 7
{
( 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
( 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
( 544 0 16 ) ( 544 0 17 ) ( 544 2 16 ) tile191 [ 0 0.5 0 0 ] [ 0 0 -1 0 ] 180 1 1
}
// brush 8
{
( 0 0 -16 ) ( 0 2 -16 ) ( 0 0 -15 ) tile191 [ 0 -0.5 0 0 ] [ 0 0 -1 0 ] 270 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 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
( 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
}
// brush 9
{
( -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
( 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
( 0 256 16 ) ( 0 256 17 ) ( 0 258 16 ) tile191 [ 0 0.5 0 0 ] [ 0 0 -1 0 ] 270 1 1
}
// brush 10
{
( -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
( -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
( -272 256 16 ) ( -272 256 17 ) ( -272 258 16 ) tile191 [ 0 0.5 0 0 ] [ 0 0 -1 0 ] 270 1 1
}
// brush 11
{
( 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
( 272 0 -16 ) ( 274.125 0 -16 ) ( 272 2 -16 ) tile191 [ -0.47058823529411775 0 0 0 ] [ 0 -0.5 0 0 ] 270 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
( 544 256 16 ) ( 546.125 256 16 ) ( 544 256 17 ) tile191 [ -0.47058823529411775 0 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
}
// brush 12
{
( 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
( 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
}
}
// 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 -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
( -144 -96 16 ) ( -144 -97 16 ) ( -143 -96 16 ) "Stone Base/albedo" [ -1 0 0 0 ] [ -0 -1 -0 0 ] 0 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
( -144 -128 16 ) ( -143 -128 16 ) ( -144 -128 17 ) "Stone Base/albedo" [ -1 0 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 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
{
( -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

@@ -1,31 +1,130 @@
// 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"
// 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
}
}
// 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 -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
( 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
{
@@ -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
}
}
// 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"
// 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
( -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
@@ -78,48 +78,6 @@
"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
@@ -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
}
}
// 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"
type="CompressedTexture2D"
uid="uid://dwhdp7spars2b"
path.s3tc="res://.godot/imported/texture.png-59546a6b6ae00ae598d09228d4c66fd2.s3tc.ctex"
uid="uid://cqtxxrpfvymko"
path.s3tc="res://.godot/imported/albedo.png-94a1bad07a09df0b9c2c6971f6d1a756.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
@@ -11,8 +11,8 @@ metadata={
[deps]
source_file="res://assets/textures/texture.png"
dest_files=["res://.godot/imported/texture.png-59546a6b6ae00ae598d09228d4c66fd2.s3tc.ctex"]
source_file="res://trenchbroom/textures/Stone Base/albedo.png"
dest_files=["res://.godot/imported/albedo.png-94a1bad07a09df0b9c2c6971f6d1a756.s3tc.ctex"]
[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"
type="CompressedTexture2D"
uid="uid://doknmohl75xnp"
path.s3tc="res://.godot/imported/t_floormetal1.png-42986c698f9d8b89446ac25d30252b9c.s3tc.ctex"
uid="uid://d15eqalyirq77"
path.s3tc="res://.godot/imported/metalness.png-4d0f08f876483f872b739098571e4533.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
@@ -11,8 +11,8 @@ metadata={
[deps]
source_file="res://assets/textures/t_floormetal1.png"
dest_files=["res://.godot/imported/t_floormetal1.png-42986c698f9d8b89446ac25d30252b9c.s3tc.ctex"]
source_file="res://trenchbroom/textures/Stone Base/metalness.png"
dest_files=["res://.godot/imported/metalness.png-4d0f08f876483f872b739098571e4533.s3tc.ctex"]
[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
#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
// on other compilers without modification.

BIN
src/triangulization.o Normal file

Binary file not shown.

Binary file not shown.