Карта Backrooms, порталы, комнаты по картам и зрение камня
- Backrooms на готовой модели (CC-BY, VTX): отдельный пакет backrooms.pck, качается при первом входе в портал (World/map_loader.gd), навмеш запечён заранее. - Порталы между картами (World/portal.gd); выход из Backrooms возвращает в мир. - Мультиплеер: игроки и общий камень делятся на комнаты по картам (Net/net.gd). - Камень видит игрока только вблизи или в поле зрения, может потерять и бродит по навмешу (sight_limited); в мире и в Backrooms включено. - Экспорт: пресет Backrooms для пакета карты, основной пресет без неё. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@@ -1,6 +1,9 @@
|
|||||||
extends Node
|
extends Node
|
||||||
# Автолоад "Net". Один и тот же скрипт работает и на клиенте, и на выделенном сервере
|
# Автолоад "Net". Один и тот же скрипт работает и на клиенте, и на выделенном сервере
|
||||||
# (RPC требуют одинаковый путь узла и скрипт). Сервер — это headless-запуск Godot.
|
# (RPC требуют одинаковый путь узла и скрипт). Сервер — это headless-запуск Godot.
|
||||||
|
#
|
||||||
|
# Игроки делятся на «комнаты» по картам: видят друг друга и общий камень-преследователь
|
||||||
|
# только те, кто сейчас на одной карте. Сервер ничего не знает об уровнях — он лишь пересылает.
|
||||||
|
|
||||||
const PORT = 9080
|
const PORT = 9080
|
||||||
const DEFAULT_URL = "ws://127.0.0.1:9080"
|
const DEFAULT_URL = "ws://127.0.0.1:9080"
|
||||||
@@ -20,16 +23,24 @@ var ghosts := {} # peer_id -> Ghost
|
|||||||
var send_timer := 0.0
|
var send_timer := 0.0
|
||||||
var connected := false
|
var connected := false
|
||||||
|
|
||||||
|
# Клиент: на какой мы карте. map_ready — сервер подтвердил, что мы в её комнате.
|
||||||
|
var current_map := "world"
|
||||||
|
var map_ready := false
|
||||||
|
|
||||||
# Камень-преследователь: его считает один клиент (владелец), остальные повторяют
|
# Камень-преследователь: его считает один клиент (владелец), остальные повторяют
|
||||||
var rock: Node3D = null # Камень этой сцены (регистрирует сам)
|
var rock: Node3D = null # Камень этой сцены (регистрирует сам)
|
||||||
var rock_owner := 0 # peer_id владельца (0 — ещё не назначен); на сервере тоже
|
var rock_owner := 0 # peer_id владельца (0 — ещё не назначен)
|
||||||
var rock_pos := Vector3.ZERO
|
var rock_pos := Vector3.ZERO
|
||||||
var rock_yaw := 0.0
|
var rock_yaw := 0.0
|
||||||
var rock_has_state := false
|
var rock_has_state := false
|
||||||
var rock_last_seen := 0.0 # Сервер: когда владелец в последний раз присылал камень (сек)
|
|
||||||
var dead_peers := {} # peer_id -> true, пока игрока поймали
|
var dead_peers := {} # peer_id -> true, пока игрока поймали
|
||||||
var hooked_player: Node = null
|
var hooked_player: Node = null
|
||||||
|
|
||||||
|
# Сервер
|
||||||
|
var peer_maps := {} # peer_id -> карта ("" пока клиент не сообщил)
|
||||||
|
var rock_owners := {} # карта -> peer_id владельца камня
|
||||||
|
var rock_seen := {} # карта -> время (сек), когда владелец последний раз присылал камень
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
is_server = DisplayServer.get_name() == "headless"
|
is_server = DisplayServer.get_name() == "headless"
|
||||||
if is_server:
|
if is_server:
|
||||||
@@ -53,66 +64,95 @@ func _start_server() -> void:
|
|||||||
|
|
||||||
func _server_peer_joined(id: int) -> void:
|
func _server_peer_joined(id: int) -> void:
|
||||||
print("+ игрок ", id)
|
print("+ игрок ", id)
|
||||||
if rock_owner == 0:
|
peer_maps[id] = ""
|
||||||
_set_rock_owner(id)
|
|
||||||
else:
|
|
||||||
recv_rock_owner.rpc_id(id, rock_owner)
|
|
||||||
|
|
||||||
func _server_peer_left(id: int) -> void:
|
func _server_peer_left(id: int) -> void:
|
||||||
print("- игрок ", id)
|
print("- игрок ", id)
|
||||||
for other in multiplayer.get_peers():
|
var map: String = peer_maps.get(id, "")
|
||||||
if other != id:
|
peer_maps.erase(id)
|
||||||
recv_left.rpc_id(other, id)
|
_leave_room(id, map)
|
||||||
if id == rock_owner:
|
|
||||||
_set_rock_owner(_next_rock_owner(id), id)
|
|
||||||
|
|
||||||
# Новый владелец камня — наименьший peer_id среди оставшихся, кроме except (0 — никого)
|
# Игроки комнаты map, кроме except
|
||||||
func _next_rock_owner(except: int) -> int:
|
func _room(map: String, except := 0) -> Array:
|
||||||
var next := 0
|
var out := []
|
||||||
|
if map == "":
|
||||||
|
return out
|
||||||
for p in multiplayer.get_peers():
|
for p in multiplayer.get_peers():
|
||||||
if p != except and (next == 0 or p < next):
|
if p != except and peer_maps.get(p, "") == map:
|
||||||
|
out.append(p)
|
||||||
|
return out
|
||||||
|
|
||||||
|
# Игрок id покинул комнату map (вышел или сменил карту)
|
||||||
|
func _leave_room(id: int, map: String) -> void:
|
||||||
|
if map == "":
|
||||||
|
return
|
||||||
|
for other in _room(map, id):
|
||||||
|
recv_left.rpc_id(other, id)
|
||||||
|
if rock_owners.get(map, 0) == id:
|
||||||
|
_set_rock_owner(map, _next_rock_owner(map, id))
|
||||||
|
|
||||||
|
# Новый владелец камня — наименьший peer_id в комнате, кроме except (0 — никого)
|
||||||
|
func _next_rock_owner(map: String, except: int) -> int:
|
||||||
|
var next := 0
|
||||||
|
for p in _room(map, except):
|
||||||
|
if next == 0 or p < next:
|
||||||
next = p
|
next = p
|
||||||
return next
|
return next
|
||||||
|
|
||||||
func _set_rock_owner(id: int, gone := 0) -> void:
|
func _set_rock_owner(map: String, id: int) -> void:
|
||||||
rock_owner = id
|
rock_owners[map] = id
|
||||||
rock_last_seen = Time.get_ticks_msec() / 1000.0
|
rock_seen[map] = Time.get_ticks_msec() / 1000.0
|
||||||
if id != 0:
|
if id != 0:
|
||||||
print("камень считает игрок ", id)
|
print("[%s] камень считает игрок %d" % [map, id])
|
||||||
for p in multiplayer.get_peers():
|
for p in _room(map):
|
||||||
if p != gone:
|
|
||||||
recv_rock_owner.rpc_id(p, id)
|
recv_rock_owner.rpc_id(p, id)
|
||||||
|
|
||||||
# Владелец перестал присылать камень (вкладка в фоне, лаги) — передаём другому
|
# Владелец перестал присылать камень (вкладка в фоне, лаги) — передаём другому
|
||||||
func _server_check_rock_owner() -> void:
|
func _server_check_rock_owner() -> void:
|
||||||
if rock_owner == 0:
|
var now := Time.get_ticks_msec() / 1000.0
|
||||||
return
|
for map in rock_owners.keys():
|
||||||
if Time.get_ticks_msec() / 1000.0 - rock_last_seen > ROCK_TIMEOUT:
|
var owner: int = rock_owners[map]
|
||||||
var next := _next_rock_owner(rock_owner)
|
if owner != 0 and now - rock_seen.get(map, now) > ROCK_TIMEOUT:
|
||||||
|
var next := _next_rock_owner(map, owner)
|
||||||
if next != 0:
|
if next != 0:
|
||||||
_set_rock_owner(next)
|
_set_rock_owner(map, next)
|
||||||
|
|
||||||
# Клиент -> сервер: своё состояние. Сервер пересылает остальным.
|
# Клиент -> сервер: я теперь на этой карте. Подтверждение приходит в recv_map_ack.
|
||||||
|
@rpc("any_peer", "reliable")
|
||||||
|
func submit_map(map: String) -> void:
|
||||||
|
if not is_server:
|
||||||
|
return
|
||||||
|
var id := multiplayer.get_remote_sender_id()
|
||||||
|
var old: String = peer_maps.get(id, "")
|
||||||
|
peer_maps[id] = map
|
||||||
|
if old != map:
|
||||||
|
_leave_room(id, old)
|
||||||
|
recv_map_ack.rpc_id(id, map)
|
||||||
|
if rock_owners.get(map, 0) == 0:
|
||||||
|
_set_rock_owner(map, id)
|
||||||
|
else:
|
||||||
|
recv_rock_owner.rpc_id(id, rock_owners[map])
|
||||||
|
|
||||||
|
# Клиент -> сервер: своё состояние. Сервер пересылает остальным на той же карте.
|
||||||
@rpc("any_peer", "unreliable_ordered")
|
@rpc("any_peer", "unreliable_ordered")
|
||||||
func submit_state(pos: Vector3, yaw: float, pitch: float, flags: int) -> void:
|
func submit_state(pos: Vector3, yaw: float, pitch: float, flags: int) -> void:
|
||||||
if not is_server:
|
if not is_server:
|
||||||
return
|
return
|
||||||
var sender := multiplayer.get_remote_sender_id()
|
var sender := multiplayer.get_remote_sender_id()
|
||||||
for other in multiplayer.get_peers():
|
for other in _room(peer_maps.get(sender, ""), sender):
|
||||||
if other != sender:
|
|
||||||
recv_state.rpc_id(other, sender, pos, yaw, pitch, flags)
|
recv_state.rpc_id(other, sender, pos, yaw, pitch, flags)
|
||||||
|
|
||||||
# Владелец камня -> сервер: позиция камня. Сервер пересылает остальным.
|
# Владелец камня -> сервер: позиция камня. Сервер пересылает остальным на той же карте.
|
||||||
@rpc("any_peer", "unreliable_ordered")
|
@rpc("any_peer", "unreliable_ordered")
|
||||||
func submit_rock(pos: Vector3, yaw: float) -> void:
|
func submit_rock(pos: Vector3, yaw: float) -> void:
|
||||||
if not is_server:
|
if not is_server:
|
||||||
return
|
return
|
||||||
var sender := multiplayer.get_remote_sender_id()
|
var sender := multiplayer.get_remote_sender_id()
|
||||||
if sender != rock_owner:
|
var map: String = peer_maps.get(sender, "")
|
||||||
|
if map == "" or rock_owners.get(map, 0) != sender:
|
||||||
return
|
return
|
||||||
rock_last_seen = Time.get_ticks_msec() / 1000.0
|
rock_seen[map] = Time.get_ticks_msec() / 1000.0
|
||||||
for other in multiplayer.get_peers():
|
for other in _room(map, sender):
|
||||||
if other != sender:
|
|
||||||
recv_rock.rpc_id(other, pos, yaw)
|
recv_rock.rpc_id(other, pos, yaw)
|
||||||
|
|
||||||
# Клиент -> сервер: его поймали (dead) или он возродился в точке pos.
|
# Клиент -> сервер: его поймали (dead) или он возродился в точке pos.
|
||||||
@@ -121,8 +161,7 @@ func submit_life(dead: bool, pos: Vector3) -> void:
|
|||||||
if not is_server:
|
if not is_server:
|
||||||
return
|
return
|
||||||
var sender := multiplayer.get_remote_sender_id()
|
var sender := multiplayer.get_remote_sender_id()
|
||||||
for other in multiplayer.get_peers():
|
for other in _room(peer_maps.get(sender, ""), sender):
|
||||||
if other != sender:
|
|
||||||
recv_life.rpc_id(other, sender, dead, pos)
|
recv_life.rpc_id(other, sender, dead, pos)
|
||||||
|
|
||||||
# ---------- Клиент ----------
|
# ---------- Клиент ----------
|
||||||
@@ -152,23 +191,81 @@ func _connect_client() -> void:
|
|||||||
|
|
||||||
func _on_connected() -> void:
|
func _on_connected() -> void:
|
||||||
connected = true
|
connected = true
|
||||||
|
submit_map.rpc_id(1, current_map)
|
||||||
|
|
||||||
func _on_lost() -> void:
|
func _on_lost() -> void:
|
||||||
connected = false
|
connected = false
|
||||||
for g in ghosts.values():
|
_reset_room_state()
|
||||||
g.queue_free()
|
|
||||||
ghosts.clear()
|
|
||||||
dead_peers.clear()
|
|
||||||
rock_owner = 0
|
|
||||||
rock_has_state = false
|
|
||||||
multiplayer.multiplayer_peer = null
|
multiplayer.multiplayer_peer = null
|
||||||
_schedule_retry()
|
_schedule_retry()
|
||||||
|
|
||||||
func _schedule_retry() -> void:
|
func _schedule_retry() -> void:
|
||||||
get_tree().create_timer(RETRY_DELAY).timeout.connect(_connect_client)
|
get_tree().create_timer(RETRY_DELAY).timeout.connect(_connect_client)
|
||||||
|
|
||||||
|
# Забываем всё, что знали про комнату: чужих игроков, владельца и позицию камня
|
||||||
|
func _reset_room_state() -> void:
|
||||||
|
for g in ghosts.values():
|
||||||
|
if is_instance_valid(g):
|
||||||
|
g.queue_free()
|
||||||
|
ghosts.clear()
|
||||||
|
dead_peers.clear()
|
||||||
|
rock_owner = 0
|
||||||
|
rock_has_state = false
|
||||||
|
hooked_player = null
|
||||||
|
map_ready = false
|
||||||
|
|
||||||
|
# Мы перешли на другую карту (вызывает сама карта при загрузке, идемпотентно)
|
||||||
|
func enter_map(map: String) -> void:
|
||||||
|
if map == current_map:
|
||||||
|
return
|
||||||
|
current_map = map
|
||||||
|
_reset_room_state()
|
||||||
|
if connected:
|
||||||
|
submit_map.rpc_id(1, map)
|
||||||
|
|
||||||
|
# Портал: сообщаем серверу о смене карты и загружаем сцену
|
||||||
|
func go_to_map(map: String, scene_path: String) -> void:
|
||||||
|
enter_map(map)
|
||||||
|
get_tree().change_scene_to_file.call_deferred(scene_path)
|
||||||
|
|
||||||
|
# Камень считаем сами: если не в сети или мы владелец. Пока сервер не назначил владельца — ждём.
|
||||||
|
func rock_is_local() -> bool:
|
||||||
|
if not connected:
|
||||||
|
return true
|
||||||
|
return rock_owner == multiplayer.get_unique_id()
|
||||||
|
|
||||||
|
@rpc("authority", "reliable")
|
||||||
|
func recv_map_ack(map: String) -> void:
|
||||||
|
if map == current_map:
|
||||||
|
map_ready = true
|
||||||
|
|
||||||
|
@rpc("authority", "reliable")
|
||||||
|
func recv_rock_owner(id: int) -> void:
|
||||||
|
if map_ready:
|
||||||
|
rock_owner = id
|
||||||
|
|
||||||
|
@rpc("authority", "unreliable_ordered")
|
||||||
|
func recv_rock(pos: Vector3, yaw: float) -> void:
|
||||||
|
if not map_ready:
|
||||||
|
return
|
||||||
|
rock_pos = pos
|
||||||
|
rock_yaw = yaw
|
||||||
|
rock_has_state = true
|
||||||
|
|
||||||
|
@rpc("authority", "reliable")
|
||||||
|
func recv_life(id: int, dead: bool, pos: Vector3) -> void:
|
||||||
|
if not map_ready:
|
||||||
|
return
|
||||||
|
if dead:
|
||||||
|
dead_peers[id] = true
|
||||||
|
else:
|
||||||
|
dead_peers.erase(id)
|
||||||
|
peer_respawned.emit(pos)
|
||||||
|
|
||||||
@rpc("authority", "unreliable_ordered")
|
@rpc("authority", "unreliable_ordered")
|
||||||
func recv_state(id: int, pos: Vector3, yaw: float, pitch: float, flags: int) -> void:
|
func recv_state(id: int, pos: Vector3, yaw: float, pitch: float, flags: int) -> void:
|
||||||
|
if not map_ready or get_tree().current_scene == null:
|
||||||
|
return # Идёт смена сцены — следующий пакет придёт через 50 мс
|
||||||
var ghost: Ghost = ghosts.get(id)
|
var ghost: Ghost = ghosts.get(id)
|
||||||
if ghost == null:
|
if ghost == null:
|
||||||
ghost = Ghost.new()
|
ghost = Ghost.new()
|
||||||
@@ -185,30 +282,6 @@ func recv_left(id: int) -> void:
|
|||||||
ghosts.erase(id)
|
ghosts.erase(id)
|
||||||
dead_peers.erase(id)
|
dead_peers.erase(id)
|
||||||
|
|
||||||
# Камень считаем сами: если не в сети или мы владелец. Пока сервер не назначил владельца — ждём.
|
|
||||||
func rock_is_local() -> bool:
|
|
||||||
if not connected:
|
|
||||||
return true
|
|
||||||
return rock_owner == multiplayer.get_unique_id()
|
|
||||||
|
|
||||||
@rpc("authority", "reliable")
|
|
||||||
func recv_rock_owner(id: int) -> void:
|
|
||||||
rock_owner = id
|
|
||||||
|
|
||||||
@rpc("authority", "unreliable_ordered")
|
|
||||||
func recv_rock(pos: Vector3, yaw: float) -> void:
|
|
||||||
rock_pos = pos
|
|
||||||
rock_yaw = yaw
|
|
||||||
rock_has_state = true
|
|
||||||
|
|
||||||
@rpc("authority", "reliable")
|
|
||||||
func recv_life(id: int, dead: bool, pos: Vector3) -> void:
|
|
||||||
if dead:
|
|
||||||
dead_peers[id] = true
|
|
||||||
else:
|
|
||||||
dead_peers.erase(id)
|
|
||||||
peer_respawned.emit(pos)
|
|
||||||
|
|
||||||
# Сообщаем остальным о смерти и возрождении своего игрока
|
# Сообщаем остальным о смерти и возрождении своего игрока
|
||||||
func _hook_player(player: Node) -> void:
|
func _hook_player(player: Node) -> void:
|
||||||
if hooked_player == player:
|
if hooked_player == player:
|
||||||
@@ -218,14 +291,14 @@ func _hook_player(player: Node) -> void:
|
|||||||
player.respawned.connect(func(): _send_life(false, player))
|
player.respawned.connect(func(): _send_life(false, player))
|
||||||
|
|
||||||
func _send_life(dead: bool, player: Node) -> void:
|
func _send_life(dead: bool, player: Node) -> void:
|
||||||
if connected:
|
if connected and map_ready:
|
||||||
submit_life.rpc_id(1, dead, player.global_position)
|
submit_life.rpc_id(1, dead, player.global_position)
|
||||||
|
|
||||||
func _process(delta: float) -> void:
|
func _process(delta: float) -> void:
|
||||||
if is_server:
|
if is_server:
|
||||||
_server_check_rock_owner()
|
_server_check_rock_owner()
|
||||||
return
|
return
|
||||||
if not connected:
|
if not connected or not map_ready:
|
||||||
return
|
return
|
||||||
send_timer += delta
|
send_timer += delta
|
||||||
if send_timer < 1.0 / SEND_RATE:
|
if send_timer < 1.0 / SEND_RATE:
|
||||||
|
|||||||
@@ -0,0 +1,56 @@
|
|||||||
|
extends Node3D
|
||||||
|
# Backrooms на готовой модели. Сцена живёт в отдельном пакете (backrooms.pck) и качается
|
||||||
|
# только при первом входе в портал. Коллизии строим по мешам модели при загрузке,
|
||||||
|
# навмеш для камня запечён заранее (backrooms_nav.res) — в вебе запекать на лету долго.
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
Net.enter_map("backrooms")
|
||||||
|
_build_colliders()
|
||||||
|
_build_environment()
|
||||||
|
_build_hum()
|
||||||
|
|
||||||
|
func _build_colliders() -> void:
|
||||||
|
for mi in $Map.find_children("*", "MeshInstance3D", true, false):
|
||||||
|
mi.create_trimesh_collision()
|
||||||
|
|
||||||
|
func _build_environment() -> void:
|
||||||
|
var env := Environment.new()
|
||||||
|
env.background_mode = Environment.BG_COLOR
|
||||||
|
env.background_color = Color(0.06, 0.05, 0.03)
|
||||||
|
env.ambient_light_source = Environment.AMBIENT_SOURCE_COLOR
|
||||||
|
env.ambient_light_color = Color(1.0, 0.95, 0.8)
|
||||||
|
env.ambient_light_energy = 0.7
|
||||||
|
env.fog_enabled = true
|
||||||
|
env.fog_light_color = Color(0.25, 0.2, 0.09)
|
||||||
|
env.fog_density = 0.012
|
||||||
|
var we := WorldEnvironment.new()
|
||||||
|
we.environment = env
|
||||||
|
add_child(we)
|
||||||
|
|
||||||
|
# Гул ламп: 2 секунды, частоты кратны 0.5 Гц — петля без щелчка
|
||||||
|
func _build_hum() -> void:
|
||||||
|
const RATE := 11025
|
||||||
|
var n := RATE * 2
|
||||||
|
var data := PackedByteArray()
|
||||||
|
data.resize(n * 2)
|
||||||
|
var rng := RandomNumberGenerator.new()
|
||||||
|
rng.seed = 5
|
||||||
|
for i in n:
|
||||||
|
var t := float(i) / RATE
|
||||||
|
var s := 0.50 * sin(TAU * 60.0 * t) + 0.25 * sin(TAU * 120.0 * t) \
|
||||||
|
+ 0.12 * sin(TAU * 180.0 * t) + 0.06 * sin(TAU * 240.0 * t)
|
||||||
|
s += rng.randf_range(-1.0, 1.0) * 0.03
|
||||||
|
data.encode_s16(i * 2, int(clampf(s, -1.0, 1.0) * 12000.0))
|
||||||
|
var wav := AudioStreamWAV.new()
|
||||||
|
wav.format = AudioStreamWAV.FORMAT_16_BITS
|
||||||
|
wav.mix_rate = RATE
|
||||||
|
wav.stereo = false
|
||||||
|
wav.loop_mode = AudioStreamWAV.LOOP_FORWARD
|
||||||
|
wav.loop_begin = 0
|
||||||
|
wav.loop_end = n
|
||||||
|
wav.data = data
|
||||||
|
var player := AudioStreamPlayer.new()
|
||||||
|
player.stream = wav
|
||||||
|
player.volume_db = -12.0
|
||||||
|
player.autoplay = true
|
||||||
|
add_child(player)
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://gmpkjl6m3415
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
[gd_scene format=3 uid="uid://djgkggvwiaaoy"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://gmpkjl6m3415" path="res://World/Backrooms/backrooms.gd" id="1_level"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://b8ef3wy1pthgm" path="res://models/backrooms/backrooms_vr.glb" id="2_map"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://c3efk6k8xnf57" path="res://Player/Player.tscn" id="3_player"]
|
||||||
|
[ext_resource type="PackedScene" path="res://models/Bochi-Rock/rock.tscn" id="4_rock"]
|
||||||
|
[ext_resource type="Script" uid="uid://bu8v0ivhmnykt" path="res://World/portal.gd" id="5_portal"]
|
||||||
|
[ext_resource type="NavigationMesh" path="res://World/Backrooms/backrooms_nav.res" id="6_nav"]
|
||||||
|
|
||||||
|
[node name="Backrooms" type="Node3D" unique_id=511186617]
|
||||||
|
script = ExtResource("1_level")
|
||||||
|
|
||||||
|
[node name="Map" parent="." unique_id=82811432 instance=ExtResource("2_map")]
|
||||||
|
transform = Transform3D(1.4, 0, 0, 0, 1.4, 0, 0, 0, 1.4, 0, 0, 0)
|
||||||
|
|
||||||
|
[node name="Player" parent="." unique_id=143512730 instance=ExtResource("3_player")]
|
||||||
|
transform = Transform3D(0, 0, 1, 0, 1, 0, -1, 0, 0, -0.4838078, 1.2, 2.0468445)
|
||||||
|
|
||||||
|
[node name="Rock" parent="." unique_id=311663607 instance=ExtResource("4_rock")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -48, 0, 3)
|
||||||
|
speed = 10.0
|
||||||
|
catch_distance = 2.0
|
||||||
|
catch_height = 3.0
|
||||||
|
sight_limited = true
|
||||||
|
|
||||||
|
[node name="Exit" type="Area3D" parent="." unique_id=1540431614]
|
||||||
|
transform = Transform3D(0, 0, 1, 0, 1, 0, -1, 0, 0, -72, -0.15, 9)
|
||||||
|
script = ExtResource("5_portal")
|
||||||
|
target_map = "world"
|
||||||
|
target_scene = "res://main.tscn"
|
||||||
|
title = "EXIT"
|
||||||
|
color = Color(0.3, 1, 0.45, 1)
|
||||||
|
|
||||||
|
[node name="Navigation" type="NavigationRegion3D" parent="." unique_id=122126248]
|
||||||
|
navigation_mesh = ExtResource("6_nav")
|
||||||
@@ -0,0 +1,123 @@
|
|||||||
|
extends Node
|
||||||
|
# Подгружает карту отдельным пакетом при первом входе в портал: в вебе её не качают при старте игры.
|
||||||
|
# Пакет (например backrooms.pck) лежит рядом с index.html. Если сцена уже есть в проекте
|
||||||
|
# (редактор, десктоп-запуск) — качать нечего, переходим сразу.
|
||||||
|
|
||||||
|
signal enter_failed
|
||||||
|
|
||||||
|
const PACK_URL_ARG := "--pack-url=" # Для тестов на десктопе: --pack-url=http://127.0.0.1:8000/
|
||||||
|
|
||||||
|
var _loaded := {} # имя пакета -> true, чтобы не качать и не монтировать дважды
|
||||||
|
var _busy := false
|
||||||
|
var _layer: CanvasLayer
|
||||||
|
var _label: Label
|
||||||
|
var _bar: ProgressBar
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
process_mode = Node.PROCESS_MODE_ALWAYS
|
||||||
|
|
||||||
|
func enter(map: String, scene_path: String, pack_name: String, title: String) -> void:
|
||||||
|
if _busy:
|
||||||
|
return
|
||||||
|
if pack_name != "" and not _loaded.has(pack_name) and not ResourceLoader.exists(scene_path):
|
||||||
|
_busy = true
|
||||||
|
var ok := await _download_and_mount(pack_name, title)
|
||||||
|
_busy = false
|
||||||
|
if not ok:
|
||||||
|
enter_failed.emit()
|
||||||
|
return
|
||||||
|
Net.go_to_map(map, scene_path)
|
||||||
|
|
||||||
|
func _download_and_mount(pack_name: String, title: String) -> bool:
|
||||||
|
_show("Загрузка: %s…" % title)
|
||||||
|
get_tree().paused = true # Пока качаем, мир стоит (камень не должен убить игрока на экране загрузки)
|
||||||
|
|
||||||
|
var http := HTTPRequest.new()
|
||||||
|
http.process_mode = Node.PROCESS_MODE_ALWAYS
|
||||||
|
http.download_file = "user://" + pack_name
|
||||||
|
add_child(http)
|
||||||
|
var state := {"done": false, "result": -1, "code": 0}
|
||||||
|
http.request_completed.connect(func(result: int, code: int, _h, _b):
|
||||||
|
state.result = result
|
||||||
|
state.code = code
|
||||||
|
state.done = true)
|
||||||
|
|
||||||
|
var ok := false
|
||||||
|
# no-cache: браузер сверяет файл с сервером (после обновления пакета не подсунет старый из кэша)
|
||||||
|
if http.request(_pack_url(pack_name), ["Cache-Control: no-cache"]) == OK:
|
||||||
|
while not state.done:
|
||||||
|
_update_progress(http, title)
|
||||||
|
await get_tree().process_frame
|
||||||
|
if state.result == HTTPRequest.RESULT_SUCCESS and state.code == 200:
|
||||||
|
ok = ProjectSettings.load_resource_pack("user://" + pack_name, false) # false: файлы основной игры в приоритете
|
||||||
|
http.queue_free()
|
||||||
|
|
||||||
|
if ok:
|
||||||
|
_loaded[pack_name] = true
|
||||||
|
_hide()
|
||||||
|
else:
|
||||||
|
_label.text = "Не удалось загрузить карту"
|
||||||
|
_bar.visible = false
|
||||||
|
await get_tree().create_timer(2.5).timeout
|
||||||
|
_hide()
|
||||||
|
get_tree().paused = false
|
||||||
|
return ok
|
||||||
|
|
||||||
|
func _pack_url(pack_name: String) -> String:
|
||||||
|
for arg in OS.get_cmdline_user_args():
|
||||||
|
if arg.begins_with(PACK_URL_ARG):
|
||||||
|
return arg.substr(PACK_URL_ARG.length()) + pack_name
|
||||||
|
if OS.has_feature("web"):
|
||||||
|
return str(JavaScriptBridge.eval("new URL('%s', window.location.href).href" % pack_name))
|
||||||
|
return "http://127.0.0.1:8000/" + pack_name
|
||||||
|
|
||||||
|
# ---------- Экран загрузки ----------
|
||||||
|
|
||||||
|
func _show(text: String) -> void:
|
||||||
|
_layer = CanvasLayer.new()
|
||||||
|
_layer.layer = 100
|
||||||
|
add_child(_layer)
|
||||||
|
|
||||||
|
var bg := ColorRect.new()
|
||||||
|
bg.color = Color(0, 0, 0, 0.88)
|
||||||
|
bg.mouse_filter = Control.MOUSE_FILTER_IGNORE
|
||||||
|
_layer.add_child(bg)
|
||||||
|
bg.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT)
|
||||||
|
|
||||||
|
_label = Label.new()
|
||||||
|
_label.text = text
|
||||||
|
_label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
|
||||||
|
_label.vertical_alignment = VERTICAL_ALIGNMENT_CENTER
|
||||||
|
_label.add_theme_font_size_override("font_size", 40)
|
||||||
|
bg.add_child(_label)
|
||||||
|
_label.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT)
|
||||||
|
|
||||||
|
_bar = ProgressBar.new()
|
||||||
|
_bar.custom_minimum_size = Vector2(420, 14)
|
||||||
|
_bar.show_percentage = false
|
||||||
|
_bar.indeterminate = true
|
||||||
|
var track := StyleBoxFlat.new()
|
||||||
|
track.bg_color = Color(1, 1, 1, 0.15)
|
||||||
|
var fill := StyleBoxFlat.new()
|
||||||
|
fill.bg_color = Color(1.0, 0.85, 0.25)
|
||||||
|
_bar.add_theme_stylebox_override("background", track)
|
||||||
|
_bar.add_theme_stylebox_override("fill", fill)
|
||||||
|
bg.add_child(_bar)
|
||||||
|
_bar.set_anchors_and_offsets_preset(Control.PRESET_CENTER_BOTTOM, Control.PRESET_MODE_KEEP_SIZE)
|
||||||
|
_bar.position.y -= 120
|
||||||
|
|
||||||
|
func _update_progress(http: HTTPRequest, title: String) -> void:
|
||||||
|
var got := http.get_downloaded_bytes()
|
||||||
|
var total := http.get_body_size() # -1, если сервер не прислал Content-Length (например, gzip)
|
||||||
|
if total > 0:
|
||||||
|
_bar.indeterminate = false
|
||||||
|
_bar.max_value = total
|
||||||
|
_bar.value = got
|
||||||
|
_label.text = "Загрузка: %s\n%.1f / %.1f МБ" % [title, got / 1048576.0, total / 1048576.0]
|
||||||
|
else:
|
||||||
|
_label.text = "Загрузка: %s\n%.1f МБ" % [title, got / 1048576.0]
|
||||||
|
|
||||||
|
func _hide() -> void:
|
||||||
|
if _layer:
|
||||||
|
_layer.queue_free()
|
||||||
|
_layer = null
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://bp4qld1nj4cla
|
||||||
@@ -0,0 +1,90 @@
|
|||||||
|
extends Area3D
|
||||||
|
# Портал на другую карту: шаг в рамку — переход. Для сети игрок попадает в «комнату» новой карты.
|
||||||
|
|
||||||
|
@export var target_map := "backrooms"
|
||||||
|
@export var target_scene := "res://World/Backrooms/backrooms.tscn"
|
||||||
|
@export var pack_name := "" # Пакет с картой (качается при первом входе); пусто — карта уже в игре
|
||||||
|
@export var title := "BACKROOMS"
|
||||||
|
@export var color := Color(1.0, 0.85, 0.25)
|
||||||
|
@export var frame_size := Vector2(2.6, 3.6)
|
||||||
|
@export var trigger_size := Vector3(3.2, 3.6, 3.0) # Зона входа шире рамки, чтобы не обойти сбоку
|
||||||
|
|
||||||
|
var _used := false
|
||||||
|
var _glow: StandardMaterial3D
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
collision_layer = 0
|
||||||
|
collision_mask = 1
|
||||||
|
var cs := CollisionShape3D.new()
|
||||||
|
var shape := BoxShape3D.new()
|
||||||
|
shape.size = trigger_size
|
||||||
|
cs.shape = shape
|
||||||
|
cs.position.y = trigger_size.y * 0.5
|
||||||
|
add_child(cs)
|
||||||
|
_build_visuals()
|
||||||
|
body_entered.connect(_on_body_entered)
|
||||||
|
MapLoader.enter_failed.connect(func(): _used = false) # Не скачалось — можно зайти ещё раз
|
||||||
|
|
||||||
|
func _build_visuals() -> void:
|
||||||
|
var w := frame_size.x
|
||||||
|
var h := frame_size.y
|
||||||
|
|
||||||
|
var frame_mat := StandardMaterial3D.new()
|
||||||
|
frame_mat.albedo_color = color.darkened(0.5)
|
||||||
|
frame_mat.emission_enabled = true
|
||||||
|
frame_mat.emission = color
|
||||||
|
frame_mat.emission_energy_multiplier = 1.5
|
||||||
|
_add_box(Vector3(0.2, h, 0.2), Vector3(-w * 0.5 - 0.1, h * 0.5, 0), frame_mat)
|
||||||
|
_add_box(Vector3(0.2, h, 0.2), Vector3(w * 0.5 + 0.1, h * 0.5, 0), frame_mat)
|
||||||
|
_add_box(Vector3(w + 0.4, 0.2, 0.2), Vector3(0, h + 0.1, 0), frame_mat)
|
||||||
|
|
||||||
|
_glow = StandardMaterial3D.new()
|
||||||
|
_glow.shading_mode = BaseMaterial3D.SHADING_MODE_UNSHADED
|
||||||
|
_glow.transparency = BaseMaterial3D.TRANSPARENCY_ALPHA
|
||||||
|
_glow.cull_mode = BaseMaterial3D.CULL_DISABLED
|
||||||
|
_glow.albedo_color = Color(color, 0.35)
|
||||||
|
var quad := QuadMesh.new()
|
||||||
|
quad.size = frame_size
|
||||||
|
quad.material = _glow
|
||||||
|
var plane := MeshInstance3D.new()
|
||||||
|
plane.mesh = quad
|
||||||
|
plane.position.y = h * 0.5
|
||||||
|
plane.cast_shadow = GeometryInstance3D.SHADOW_CASTING_SETTING_OFF
|
||||||
|
add_child(plane)
|
||||||
|
|
||||||
|
var label := Label3D.new()
|
||||||
|
label.text = title
|
||||||
|
label.billboard = BaseMaterial3D.BILLBOARD_ENABLED
|
||||||
|
label.pixel_size = 0.01
|
||||||
|
label.font_size = 64
|
||||||
|
label.outline_size = 12
|
||||||
|
label.modulate = color
|
||||||
|
label.position.y = h + 0.8
|
||||||
|
add_child(label)
|
||||||
|
|
||||||
|
var light := OmniLight3D.new()
|
||||||
|
light.light_color = color
|
||||||
|
light.light_energy = 1.5
|
||||||
|
light.omni_range = 9.0
|
||||||
|
light.position.y = h * 0.5
|
||||||
|
light.shadow_enabled = false
|
||||||
|
add_child(light)
|
||||||
|
|
||||||
|
func _add_box(size: Vector3, pos: Vector3, mat: Material) -> void:
|
||||||
|
var mesh := BoxMesh.new()
|
||||||
|
mesh.size = size
|
||||||
|
mesh.material = mat
|
||||||
|
var mi := MeshInstance3D.new()
|
||||||
|
mi.mesh = mesh
|
||||||
|
mi.position = pos
|
||||||
|
mi.cast_shadow = GeometryInstance3D.SHADOW_CASTING_SETTING_OFF
|
||||||
|
add_child(mi)
|
||||||
|
|
||||||
|
func _process(_delta: float) -> void:
|
||||||
|
_glow.albedo_color.a = 0.3 + 0.12 * sin(Time.get_ticks_msec() * 0.004)
|
||||||
|
|
||||||
|
func _on_body_entered(body: Node3D) -> void:
|
||||||
|
if _used or not body.is_in_group("local_player") or body.get("is_dead"):
|
||||||
|
return
|
||||||
|
_used = true
|
||||||
|
MapLoader.enter(target_map, target_scene, pack_name, title)
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://bu8v0ivhmnykt
|
||||||
@@ -10,7 +10,7 @@ dedicated_server=false
|
|||||||
custom_features=""
|
custom_features=""
|
||||||
export_filter="all_resources"
|
export_filter="all_resources"
|
||||||
include_filter=""
|
include_filter=""
|
||||||
exclude_filter=""
|
exclude_filter="models/backrooms/*, World/Backrooms/*"
|
||||||
export_path="../grid-world/index.html"
|
export_path="../grid-world/index.html"
|
||||||
patches=PackedStringArray()
|
patches=PackedStringArray()
|
||||||
patch_delta_encoding=false
|
patch_delta_encoding=false
|
||||||
@@ -50,3 +50,53 @@ progressive_web_app/icon_512x512=""
|
|||||||
progressive_web_app/background_color=Color(0, 0, 0, 1)
|
progressive_web_app/background_color=Color(0, 0, 0, 1)
|
||||||
threads/emscripten_pool_size=8
|
threads/emscripten_pool_size=8
|
||||||
threads/godot_pool_size=4
|
threads/godot_pool_size=4
|
||||||
|
|
||||||
|
[preset.1]
|
||||||
|
|
||||||
|
name="Backrooms"
|
||||||
|
platform="Web"
|
||||||
|
dedicated_server=false
|
||||||
|
custom_features=""
|
||||||
|
export_filter="resources"
|
||||||
|
export_files=PackedStringArray("res://World/Backrooms/backrooms.tscn")
|
||||||
|
include_filter=""
|
||||||
|
exclude_filter="Player/*, models/Bochi-Rock/*, World/portal.gd"
|
||||||
|
export_path="../grid-world/backrooms.pck"
|
||||||
|
patches=PackedStringArray()
|
||||||
|
patch_delta_encoding=false
|
||||||
|
patch_delta_compression_level_zstd=19
|
||||||
|
patch_delta_min_reduction=0.1
|
||||||
|
patch_delta_include_filters="*"
|
||||||
|
patch_delta_exclude_filters=""
|
||||||
|
encryption_include_filters=""
|
||||||
|
encryption_exclude_filters=""
|
||||||
|
seed=0
|
||||||
|
encrypt_pck=false
|
||||||
|
encrypt_directory=false
|
||||||
|
script_export_mode=2
|
||||||
|
|
||||||
|
[preset.1.options]
|
||||||
|
|
||||||
|
custom_template/debug=""
|
||||||
|
custom_template/release=""
|
||||||
|
variant/extensions_support=true
|
||||||
|
variant/thread_support=false
|
||||||
|
vram_texture_compression/for_desktop=true
|
||||||
|
vram_texture_compression/for_mobile=false
|
||||||
|
html/export_icon=true
|
||||||
|
html/custom_html_shell=""
|
||||||
|
html/head_include=""
|
||||||
|
html/canvas_resize_policy=2
|
||||||
|
html/focus_canvas_on_start=true
|
||||||
|
html/experimental_virtual_keyboard=false
|
||||||
|
progressive_web_app/enabled=false
|
||||||
|
progressive_web_app/ensure_cross_origin_isolation_headers=true
|
||||||
|
progressive_web_app/offline_page=""
|
||||||
|
progressive_web_app/display=3
|
||||||
|
progressive_web_app/orientation=0
|
||||||
|
progressive_web_app/icon_144x144=""
|
||||||
|
progressive_web_app/icon_180x180=""
|
||||||
|
progressive_web_app/icon_512x512=""
|
||||||
|
progressive_web_app/background_color=Color(0, 0, 0, 1)
|
||||||
|
threads/emscripten_pool_size=8
|
||||||
|
threads/godot_pool_size=4
|
||||||
|
|||||||
@@ -18,6 +18,7 @@
|
|||||||
[ext_resource type="Script" uid="uid://chtck5eaaddrw" path="res://World/levitate.gd" id="15_levitate"]
|
[ext_resource type="Script" uid="uid://chtck5eaaddrw" path="res://World/levitate.gd" id="15_levitate"]
|
||||||
[ext_resource type="PackedScene" uid="uid://bmprcwbt78ghq" path="res://models/empire-state/Empire-State.glb" id="17_yaehf"]
|
[ext_resource type="PackedScene" uid="uid://bmprcwbt78ghq" path="res://models/empire-state/Empire-State.glb" id="17_yaehf"]
|
||||||
[ext_resource type="Script" uid="uid://c2k1kj4a2s2su" path="res://World/nav-bake.gd" id="18_navbake"]
|
[ext_resource type="Script" uid="uid://c2k1kj4a2s2su" path="res://World/nav-bake.gd" id="18_navbake"]
|
||||||
|
[ext_resource type="Script" uid="uid://bu8v0ivhmnykt" path="res://World/portal.gd" id="19_portal"]
|
||||||
|
|
||||||
[sub_resource type="PanoramaSkyMaterial" id="PanoramaSkyMaterial_6opy2"]
|
[sub_resource type="PanoramaSkyMaterial" id="PanoramaSkyMaterial_6opy2"]
|
||||||
panorama = ExtResource("2_5vw27")
|
panorama = ExtResource("2_5vw27")
|
||||||
@@ -62,8 +63,14 @@ amplitude = 5.0
|
|||||||
period = 8.0
|
period = 8.0
|
||||||
|
|
||||||
[node name="rock" type="Node3D" parent="Architecture" unique_id=1419147983]
|
[node name="rock" type="Node3D" parent="Architecture" unique_id=1419147983]
|
||||||
transform = Transform3D(-0.4002386, 0, -0.916411, 0, 1, 0, 0.916411, 0, -0.4002386, 5.2467575, -0.0029411316, 93.87327)
|
transform = Transform3D(-0.4002386, 0, -0.916411, 0, 1, 0, 0.916411, 0, -0.4002386, 8.31884, -0.0029411316, 40.503094)
|
||||||
script = ExtResource("10_4c57u")
|
script = ExtResource("10_4c57u")
|
||||||
|
sight_limited = true
|
||||||
|
sight_range = 45.0
|
||||||
|
sight_fov = 130.0
|
||||||
|
hearing_radius = 8.0
|
||||||
|
lose_time = 5.0
|
||||||
|
wander_radius = 40.0
|
||||||
|
|
||||||
[node name="Rock" parent="Architecture/rock" unique_id=1431376827 instance=ExtResource("11_efxa6")]
|
[node name="Rock" parent="Architecture/rock" unique_id=1431376827 instance=ExtResource("11_efxa6")]
|
||||||
|
|
||||||
@@ -127,3 +134,8 @@ transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, 188.
|
|||||||
[node name="Navigation" type="NavigationRegion3D" parent="." unique_id=1471038126]
|
[node name="Navigation" type="NavigationRegion3D" parent="." unique_id=1471038126]
|
||||||
script = ExtResource("18_navbake")
|
script = ExtResource("18_navbake")
|
||||||
exclude = Array[NodePath]([NodePath("../Architecture/rock"), NodePath("../CharacterBody3D")])
|
exclude = Array[NodePath]([NodePath("../Architecture/rock"), NodePath("../CharacterBody3D")])
|
||||||
|
|
||||||
|
[node name="BackroomsPortal" type="Area3D" parent="." unique_id=982018721]
|
||||||
|
transform = Transform3D(-0.49999985, 0, -0.8660255, 0, 1, 0, 0.8660255, 0, -0.49999985, -14.694777, 7.7547903, 22.85205)
|
||||||
|
script = ExtResource("19_portal")
|
||||||
|
pack_name = "backrooms.pck"
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
extends Node3D
|
extends Node3D
|
||||||
# Камень преследует ближайшего живого игрока, обходя препятствия по навмешу, и ловит его.
|
# Камень преследует ближайшего живого игрока, обходя препятствия по навмешу, и ловит его.
|
||||||
|
# С sight_limited он замечает игрока лишь вблизи или в поле зрения без стен между ними;
|
||||||
|
# потеряв из виду, идёт к последнему месту, где видел, и дальше бродит по карте.
|
||||||
# В сети камень считает один клиент (владелец, его назначает сервер), остальные
|
# В сети камень считает один клиент (владелец, его назначает сервер), остальные
|
||||||
# плавно повторяют его позицию — поэтому у всех игроков камень один и тот же.
|
# плавно повторяют его позицию — поэтому у всех игроков камень один и тот же.
|
||||||
|
|
||||||
@@ -12,15 +14,37 @@ extends Node3D
|
|||||||
@export var sync_smoothing := 12.0 # Плавность повтора чужого камня
|
@export var sync_smoothing := 12.0 # Плавность повтора чужого камня
|
||||||
@export var snap_distance := 20.0 # Дальше этого чужой камень не едет, а прыгает (сброс на старт)
|
@export var snap_distance := 20.0 # Дальше этого чужой камень не едет, а прыгает (сброс на старт)
|
||||||
|
|
||||||
|
@export_group("Зрение")
|
||||||
|
@export var sight_limited := false # false — знает, где игрок, из любой точки карты
|
||||||
|
@export var sight_range := 30.0 # Дальность зрения, м
|
||||||
|
@export var sight_fov := 120.0 # Угол обзора, градусы
|
||||||
|
@export var hearing_radius := 6.0 # Ближе этого замечает игрока, даже за стеной
|
||||||
|
@export var lose_time := 4.0 # Сколько ещё идёт за игроком после потери из виду, сек
|
||||||
|
@export var patrol_speed := 0.4 # Доля speed, когда бродит
|
||||||
|
@export var wander_radius := 30.0 # Куда выбирает точки для прогулки, м
|
||||||
|
@export var eye_height := 0.9 # Высота «глаз» над полом, м
|
||||||
|
|
||||||
@onready var agent: NavigationAgent3D = $NavigationAgent3D
|
@onready var agent: NavigationAgent3D = $NavigationAgent3D
|
||||||
@onready var start_transform := global_transform
|
@onready var start_transform := global_transform
|
||||||
|
|
||||||
|
enum State { WANDER, CHASE }
|
||||||
|
|
||||||
var player: Node3D = null
|
var player: Node3D = null
|
||||||
|
var _state := State.WANDER
|
||||||
|
var _last_seen := Vector3.ZERO
|
||||||
|
var _since_seen := 0.0
|
||||||
|
var _wander_target := Vector3.ZERO
|
||||||
|
var _wander_active := false
|
||||||
|
var _wander_wait := 0.0
|
||||||
|
var _wander_time := 0.0
|
||||||
|
var _own_rids: Array[RID] = []
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
agent.target_desired_distance = 1.0
|
agent.target_desired_distance = 1.0
|
||||||
agent.path_desired_distance = 1.5
|
agent.path_desired_distance = 1.5
|
||||||
agent.path_height_offset = 0.25 # Навмеш лежит чуть выше пола
|
agent.path_height_offset = 0.25 # Навмеш лежит чуть выше пола
|
||||||
|
for body in find_children("*", "CollisionObject3D", true, false):
|
||||||
|
_own_rids.append(body.get_rid()) # Луч зрения не должен упираться в сам камень
|
||||||
Net.rock = self
|
Net.rock = self
|
||||||
Net.peer_respawned.connect(_on_respawned)
|
Net.peer_respawned.connect(_on_respawned)
|
||||||
|
|
||||||
@@ -51,52 +75,151 @@ func _try_catch() -> void:
|
|||||||
if flat.length() <= catch_distance and absf(dy) <= catch_height:
|
if flat.length() <= catch_distance and absf(dy) <= catch_height:
|
||||||
player.die()
|
player.die()
|
||||||
|
|
||||||
# Ближайший по горизонтали живой игрок: свой или чужой
|
# Живые игроки: свой и чужие
|
||||||
func _pick_target() -> Node3D:
|
func _candidates() -> Array[Node3D]:
|
||||||
var best: Node3D = null
|
var out: Array[Node3D] = []
|
||||||
var best_d := INF
|
|
||||||
var candidates: Array[Node3D] = []
|
|
||||||
if not player.get("is_dead"):
|
if not player.get("is_dead"):
|
||||||
candidates.append(player)
|
out.append(player)
|
||||||
for id in Net.ghosts:
|
for id in Net.ghosts:
|
||||||
var g: Node3D = Net.ghosts[id]
|
var g: Node3D = Net.ghosts[id]
|
||||||
if is_instance_valid(g) and not Net.dead_peers.has(id):
|
if is_instance_valid(g) and not Net.dead_peers.has(id):
|
||||||
candidates.append(g)
|
out.append(g)
|
||||||
for c in candidates:
|
return out
|
||||||
var d := Vector2(c.global_position.x - global_position.x, c.global_position.z - global_position.z).length_squared()
|
|
||||||
|
func _horizontal_dist_sq(c: Node3D) -> float:
|
||||||
|
return Vector2(c.global_position.x - global_position.x, c.global_position.z - global_position.z).length_squared()
|
||||||
|
|
||||||
|
# Ближайший по горизонтали живой игрок
|
||||||
|
func _pick_target() -> Node3D:
|
||||||
|
var best: Node3D = null
|
||||||
|
var best_d := INF
|
||||||
|
for c in _candidates():
|
||||||
|
var d := _horizontal_dist_sq(c)
|
||||||
if d < best_d:
|
if d < best_d:
|
||||||
best_d = d
|
best_d = d
|
||||||
best = c
|
best = c
|
||||||
return best
|
return best
|
||||||
|
|
||||||
func _chase(delta: float) -> void:
|
# Ближайший из тех, кого камень сейчас замечает
|
||||||
var target := _pick_target()
|
func _pick_visible_target() -> Node3D:
|
||||||
if target == null:
|
var best: Node3D = null
|
||||||
return # Все лежат — стоим
|
var best_d := INF
|
||||||
|
for c in _candidates():
|
||||||
|
var d := _horizontal_dist_sq(c)
|
||||||
|
if d < best_d and _can_see(c):
|
||||||
|
best_d = d
|
||||||
|
best = c
|
||||||
|
return best
|
||||||
|
|
||||||
var flat := target.global_position - global_position
|
# Рядом — слышит (даже за стеной); дальше — только в конусе обзора и если стены не мешают
|
||||||
flat.y = 0.0
|
func _can_see(c: Node3D) -> bool:
|
||||||
if flat.length() <= catch_distance:
|
var to := c.global_position - global_position
|
||||||
_face(flat, delta) # Стоим над жертвой, пока её клиент не засчитает поимку
|
var flat := Vector3(to.x, 0.0, to.z)
|
||||||
|
var dist := flat.length()
|
||||||
|
if dist <= hearing_radius:
|
||||||
|
return true
|
||||||
|
if dist > sight_range:
|
||||||
|
return false
|
||||||
|
var fwd := -global_transform.basis.z
|
||||||
|
fwd.y = 0.0
|
||||||
|
if fwd.normalized().dot(flat / dist) < cos(deg_to_rad(sight_fov * 0.5)):
|
||||||
|
return false
|
||||||
|
var query := PhysicsRayQueryParameters3D.create(global_position + Vector3(0, eye_height, 0), c.global_position, 1)
|
||||||
|
var exclude := _own_rids.duplicate()
|
||||||
|
if c is CollisionObject3D:
|
||||||
|
exclude.append(c.get_rid())
|
||||||
|
query.exclude = exclude
|
||||||
|
return get_world_3d().direct_space_state.intersect_ray(query).is_empty()
|
||||||
|
|
||||||
|
func _chase(delta: float) -> void:
|
||||||
|
if not sight_limited:
|
||||||
|
var target := _pick_target()
|
||||||
|
if target != null: # Все лежат — стоим
|
||||||
|
_move_to(target.global_position, speed, catch_distance, delta)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
var seen := _pick_visible_target()
|
||||||
|
if seen != null:
|
||||||
|
_state = State.CHASE
|
||||||
|
_last_seen = seen.global_position
|
||||||
|
_since_seen = 0.0
|
||||||
|
elif _state == State.CHASE:
|
||||||
|
_since_seen += delta
|
||||||
|
if _since_seen > lose_time:
|
||||||
|
_state = State.WANDER
|
||||||
|
_wander_active = false
|
||||||
|
_wander_wait = 1.0
|
||||||
|
|
||||||
|
if _state == State.CHASE:
|
||||||
|
# Видим — стоим над жертвой у catch_distance; потеряли — идём к последнему месту
|
||||||
|
_move_to(_last_seen, speed, catch_distance if seen != null else 1.5, delta)
|
||||||
|
else:
|
||||||
|
_wander(delta)
|
||||||
|
|
||||||
|
func _wander(delta: float) -> void:
|
||||||
|
if _wander_wait > 0.0:
|
||||||
|
_wander_wait -= delta
|
||||||
|
return
|
||||||
|
if not _wander_active:
|
||||||
|
if not _pick_wander_target():
|
||||||
|
_wander_wait = 1.0
|
||||||
|
return
|
||||||
|
_wander_active = true
|
||||||
|
_wander_time = 0.0
|
||||||
|
_wander_time += delta
|
||||||
|
if _move_to(_wander_target, speed * patrol_speed, 1.5, delta) or _wander_time > 20.0:
|
||||||
|
_wander_active = false
|
||||||
|
_wander_wait = randf_range(1.0, 3.0)
|
||||||
|
|
||||||
|
# Случайная точка навмеша на расстоянии 8..wander_radius м; нет такой — ближайшая из дальних
|
||||||
|
func _pick_wander_target() -> bool:
|
||||||
|
var map := agent.get_navigation_map()
|
||||||
|
if NavigationServer3D.map_get_iteration_id(map) == 0:
|
||||||
|
return false
|
||||||
|
var best := Vector3.INF
|
||||||
|
var best_d := INF
|
||||||
|
for i in 8:
|
||||||
|
var p := NavigationServer3D.map_get_random_point(map, 1, true)
|
||||||
|
var d := p.distance_to(global_position)
|
||||||
|
if d < 8.0:
|
||||||
|
continue
|
||||||
|
if d <= wander_radius:
|
||||||
|
best = p
|
||||||
|
break
|
||||||
|
if d < best_d:
|
||||||
|
best = p
|
||||||
|
best_d = d
|
||||||
|
if best == Vector3.INF:
|
||||||
|
return false
|
||||||
|
_wander_target = best
|
||||||
|
return true
|
||||||
|
|
||||||
|
# Шаг к точке по навмешу. true — дошли (ближе stop_dist по горизонтали)
|
||||||
|
func _move_to(dest: Vector3, spd: float, stop_dist: float, delta: float) -> bool:
|
||||||
|
var flat := dest - global_position
|
||||||
|
flat.y = 0.0
|
||||||
|
if flat.length() <= stop_dist:
|
||||||
|
_face(flat, delta) # Стоим над жертвой, пока её клиент не засчитает поимку
|
||||||
|
return true
|
||||||
|
|
||||||
var step: Vector3
|
var step: Vector3
|
||||||
var map := agent.get_navigation_map()
|
var map := agent.get_navigation_map()
|
||||||
if NavigationServer3D.map_get_iteration_id(map) > 0:
|
if NavigationServer3D.map_get_iteration_id(map) > 0:
|
||||||
if agent.target_position.distance_to(target.global_position) > repath_distance:
|
if agent.target_position.distance_to(dest) > repath_distance:
|
||||||
agent.target_position = target.global_position
|
agent.target_position = dest
|
||||||
if not agent.is_navigation_finished():
|
if not agent.is_navigation_finished():
|
||||||
step = agent.get_next_path_position() - global_position
|
step = agent.get_next_path_position() - global_position
|
||||||
|
|
||||||
# Навмеш ещё не готов или игрок вне его — идём напрямую
|
# Навмеш ещё не готов или точка вне его — идём напрямую
|
||||||
if step == Vector3.ZERO:
|
if step == Vector3.ZERO:
|
||||||
step = flat
|
step = flat
|
||||||
|
|
||||||
var d := step.length()
|
var d := step.length()
|
||||||
if d < 0.001:
|
if d < 0.001:
|
||||||
return
|
return false
|
||||||
global_position += step / d * min(speed * delta, d)
|
global_position += step / d * min(spd * delta, d)
|
||||||
_face(Vector3(step.x, 0.0, step.z), delta)
|
_face(Vector3(step.x, 0.0, step.z), delta)
|
||||||
|
return false
|
||||||
|
|
||||||
# Камень считает другой клиент — плавно идём к тому, что он прислал
|
# Камень считает другой клиент — плавно идём к тому, что он прислал
|
||||||
func _follow_owner(delta: float) -> void:
|
func _follow_owner(delta: float) -> void:
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
[gd_scene format=3]
|
||||||
|
|
||||||
|
[ext_resource type="Script" path="res://models/Bochi-Rock/rock-follow.gd" id="1_script"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://cowp33ejxcfcl" path="res://models/Bochi-Rock/Rock.glb" id="2_model"]
|
||||||
|
[ext_resource type="AudioStream" uid="uid://280pvcvxt2n2" path="res://models/Bochi-Rock/Guitar.ogg" id="3_audio"]
|
||||||
|
|
||||||
|
[node name="Rock" type="Node3D"]
|
||||||
|
script = ExtResource("1_script")
|
||||||
|
|
||||||
|
[node name="Model" parent="." instance=ExtResource("2_model")]
|
||||||
|
|
||||||
|
[node name="NavigationAgent3D" type="NavigationAgent3D" parent="."]
|
||||||
|
height = 5.0
|
||||||
|
radius = 2.0
|
||||||
|
|
||||||
|
[node name="AudioStreamPlayer3D" type="AudioStreamPlayer3D" parent="Model"]
|
||||||
|
stream = ExtResource("3_audio")
|
||||||
|
autoplay = true
|
||||||
|
max_distance = 30.0
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
# Backrooms VR
|
||||||
|
|
||||||
|
Модель «Backrooms VR» — автор VTX (https://sketchfab.com/VTX_car)
|
||||||
|
Источник: https://sketchfab.com/3d-models/backrooms-vr-1a5c397f0a43408fa38b09ea5c041149
|
||||||
|
Лицензия: CC-BY 4.0 (http://creativecommons.org/licenses/by/4.0/)
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="scene"
|
||||||
|
importer_version=1
|
||||||
|
type="PackedScene"
|
||||||
|
uid="uid://b8ef3wy1pthgm"
|
||||||
|
path="res://.godot/imported/backrooms_vr.glb-0d2b88698924672a51ea9e43fb3ac8a4.scn"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://models/backrooms/backrooms_vr.glb"
|
||||||
|
dest_files=["res://.godot/imported/backrooms_vr.glb-0d2b88698924672a51ea9e43fb3ac8a4.scn"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
nodes/root_type=""
|
||||||
|
nodes/root_name=""
|
||||||
|
nodes/root_script=null
|
||||||
|
mesh_library/use_node_names_as_mesh_names=false
|
||||||
|
array_mesh/deduplicate_surfaces=true
|
||||||
|
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=true
|
||||||
|
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
|
||||||
|
gltf/texture_map_mode=1
|
||||||
|
After Width: | Height: | Size: 687 KiB |
@@ -0,0 +1,44 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://b6weikavgdbap"
|
||||||
|
path.s3tc="res://.godot/imported/backrooms_vr_0.png-f4c02e53a6cca71b1adac7615326ab0e.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
generator_parameters={
|
||||||
|
"md5": "dd26a9d7692e3436812fe8332db11362"
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://models/backrooms/backrooms_vr_0.png"
|
||||||
|
dest_files=["res://.godot/imported/backrooms_vr_0.png-f4c02e53a6cca71b1adac7615326ab0e.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
|
||||||
|
After Width: | Height: | Size: 549 KiB |
@@ -0,0 +1,44 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://dpud2naqkm4xs"
|
||||||
|
path.s3tc="res://.godot/imported/backrooms_vr_1.png-d716f61def983b3d40016ab77643deb5.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
generator_parameters={
|
||||||
|
"md5": "79c774f9175bf99b66d6647fc9276dd6"
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://models/backrooms/backrooms_vr_1.png"
|
||||||
|
dest_files=["res://.godot/imported/backrooms_vr_1.png-d716f61def983b3d40016ab77643deb5.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
|
||||||
|
After Width: | Height: | Size: 609 KiB |
@@ -0,0 +1,44 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://b8nb23j42isps"
|
||||||
|
path.s3tc="res://.godot/imported/backrooms_vr_10.png-6693254cade6e5be230303d4e03a4118.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
generator_parameters={
|
||||||
|
"md5": "bdf490cf7f9a54efba63ed6886a31481"
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://models/backrooms/backrooms_vr_10.png"
|
||||||
|
dest_files=["res://.godot/imported/backrooms_vr_10.png-6693254cade6e5be230303d4e03a4118.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
|
||||||
|
After Width: | Height: | Size: 1018 KiB |
@@ -0,0 +1,44 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://djx5e3wiwgqex"
|
||||||
|
path.s3tc="res://.godot/imported/backrooms_vr_11.png-a17fa98ada75a88222940123fa22d2c4.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
generator_parameters={
|
||||||
|
"md5": "0eff7867078fb002c73e86db307b5cac"
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://models/backrooms/backrooms_vr_11.png"
|
||||||
|
dest_files=["res://.godot/imported/backrooms_vr_11.png-a17fa98ada75a88222940123fa22d2c4.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
|
||||||
|
After Width: | Height: | Size: 897 KiB |
@@ -0,0 +1,44 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://djyh6v1wlujbx"
|
||||||
|
path.s3tc="res://.godot/imported/backrooms_vr_12.png-d78f07b6d7d3138c20741e40ee92edfa.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
generator_parameters={
|
||||||
|
"md5": "af3cabe8076ab6902c5ef8de7f304b52"
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://models/backrooms/backrooms_vr_12.png"
|
||||||
|
dest_files=["res://.godot/imported/backrooms_vr_12.png-d78f07b6d7d3138c20741e40ee92edfa.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
|
||||||
|
After Width: | Height: | Size: 457 KiB |
@@ -0,0 +1,44 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://dw68nfgta46bg"
|
||||||
|
path.s3tc="res://.godot/imported/backrooms_vr_13.png-5712190a97c0176b90edbead990dd794.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
generator_parameters={
|
||||||
|
"md5": "80b3f1544049ca7469516fae963a8b53"
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://models/backrooms/backrooms_vr_13.png"
|
||||||
|
dest_files=["res://.godot/imported/backrooms_vr_13.png-5712190a97c0176b90edbead990dd794.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
|
||||||
|
After Width: | Height: | Size: 722 KiB |
@@ -0,0 +1,44 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://cgx5ip8cpgxly"
|
||||||
|
path.s3tc="res://.godot/imported/backrooms_vr_14.png-bbec912f44ebcc9f8e50c98b8f9abaad.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
generator_parameters={
|
||||||
|
"md5": "f29e6fa0df4712e220723a81961d2409"
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://models/backrooms/backrooms_vr_14.png"
|
||||||
|
dest_files=["res://.godot/imported/backrooms_vr_14.png-bbec912f44ebcc9f8e50c98b8f9abaad.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
|
||||||
|
After Width: | Height: | Size: 376 KiB |
@@ -0,0 +1,44 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://dxvxjwfnpxqyb"
|
||||||
|
path.s3tc="res://.godot/imported/backrooms_vr_15.png-a20bd15c0b1b28d9456bc931978a218d.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
generator_parameters={
|
||||||
|
"md5": "be89a770b865d0c2b831e2bd61ec5d60"
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://models/backrooms/backrooms_vr_15.png"
|
||||||
|
dest_files=["res://.godot/imported/backrooms_vr_15.png-a20bd15c0b1b28d9456bc931978a218d.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
|
||||||
|
After Width: | Height: | Size: 814 KiB |
@@ -0,0 +1,44 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://yjj1swxlp5le"
|
||||||
|
path.s3tc="res://.godot/imported/backrooms_vr_16.png-07a4cbc529fe565672c305dfd8e573d6.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
generator_parameters={
|
||||||
|
"md5": "a354b1ade1b355ac5f4faf756def42da"
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://models/backrooms/backrooms_vr_16.png"
|
||||||
|
dest_files=["res://.godot/imported/backrooms_vr_16.png-07a4cbc529fe565672c305dfd8e573d6.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
|
||||||
|
After Width: | Height: | Size: 81 KiB |
@@ -0,0 +1,44 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://decg78uck2mqa"
|
||||||
|
path.s3tc="res://.godot/imported/backrooms_vr_17.png-5a591d4362230f749be443a19b09de4f.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
generator_parameters={
|
||||||
|
"md5": "a4ff81f7c103ef7064fdcdf9579550bd"
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://models/backrooms/backrooms_vr_17.png"
|
||||||
|
dest_files=["res://.godot/imported/backrooms_vr_17.png-5a591d4362230f749be443a19b09de4f.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
|
||||||
|
After Width: | Height: | Size: 727 KiB |
@@ -0,0 +1,44 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://brljydqpvgko0"
|
||||||
|
path.s3tc="res://.godot/imported/backrooms_vr_18.png-137b67a1864cee9569a91581bee56ca4.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
generator_parameters={
|
||||||
|
"md5": "1f8b3f56208dfb1ccc4cf99aead75a96"
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://models/backrooms/backrooms_vr_18.png"
|
||||||
|
dest_files=["res://.godot/imported/backrooms_vr_18.png-137b67a1864cee9569a91581bee56ca4.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
|
||||||
|
After Width: | Height: | Size: 1.2 MiB |
@@ -0,0 +1,44 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://dciao7v0fkii1"
|
||||||
|
path.s3tc="res://.godot/imported/backrooms_vr_19.png-cdf77da915a8406d23a1f971a1d765fe.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
generator_parameters={
|
||||||
|
"md5": "e093a35dfb48ed90dfee7417cb40b8aa"
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://models/backrooms/backrooms_vr_19.png"
|
||||||
|
dest_files=["res://.godot/imported/backrooms_vr_19.png-cdf77da915a8406d23a1f971a1d765fe.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
|
||||||
|
After Width: | Height: | Size: 206 KiB |
@@ -0,0 +1,44 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://eorb1lixjtbv"
|
||||||
|
path.s3tc="res://.godot/imported/backrooms_vr_2.png-4f70d8bd72d6cc50f9b317463f7076b9.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
generator_parameters={
|
||||||
|
"md5": "6f80af8f00ff83fa14604341d717c0a1"
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://models/backrooms/backrooms_vr_2.png"
|
||||||
|
dest_files=["res://.godot/imported/backrooms_vr_2.png-4f70d8bd72d6cc50f9b317463f7076b9.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
|
||||||
|
After Width: | Height: | Size: 288 KiB |
@@ -0,0 +1,44 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://xbcxlgw40igt"
|
||||||
|
path.s3tc="res://.godot/imported/backrooms_vr_20.png-4ac1f7f9258502dc9178e35c5602f20d.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
generator_parameters={
|
||||||
|
"md5": "c089944811fd6841d24c05ff96888a0d"
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://models/backrooms/backrooms_vr_20.png"
|
||||||
|
dest_files=["res://.godot/imported/backrooms_vr_20.png-4ac1f7f9258502dc9178e35c5602f20d.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
|
||||||
|
After Width: | Height: | Size: 971 KiB |
@@ -0,0 +1,44 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://crx06wyll47ou"
|
||||||
|
path.s3tc="res://.godot/imported/backrooms_vr_21.png-99c9bdd476eb15db8a1993bf96f942b2.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
generator_parameters={
|
||||||
|
"md5": "8e67b33967174d08949af75bbfdbf99b"
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://models/backrooms/backrooms_vr_21.png"
|
||||||
|
dest_files=["res://.godot/imported/backrooms_vr_21.png-99c9bdd476eb15db8a1993bf96f942b2.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
|
||||||
|
After Width: | Height: | Size: 219 KiB |
@@ -0,0 +1,44 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://cqareamgsajs"
|
||||||
|
path.s3tc="res://.godot/imported/backrooms_vr_22.png-a69fa573ac9737ff98f9e3a9cb90184f.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
generator_parameters={
|
||||||
|
"md5": "1f9cbe82491c2b29517d2e7170fcc8d2"
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://models/backrooms/backrooms_vr_22.png"
|
||||||
|
dest_files=["res://.godot/imported/backrooms_vr_22.png-a69fa573ac9737ff98f9e3a9cb90184f.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
|
||||||
|
After Width: | Height: | Size: 547 KiB |
@@ -0,0 +1,44 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://dy57qg8yhs4cx"
|
||||||
|
path.s3tc="res://.godot/imported/backrooms_vr_23.png-1d7ffb8aa29d441bde425ede0413250c.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
generator_parameters={
|
||||||
|
"md5": "afc73e7b0ceed0e68711ee2553fc102c"
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://models/backrooms/backrooms_vr_23.png"
|
||||||
|
dest_files=["res://.godot/imported/backrooms_vr_23.png-1d7ffb8aa29d441bde425ede0413250c.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
|
||||||
|
After Width: | Height: | Size: 463 KiB |
@@ -0,0 +1,44 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://bt548bd7s4get"
|
||||||
|
path.s3tc="res://.godot/imported/backrooms_vr_24.png-584f508479d8bb3725096fabaf30673a.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
generator_parameters={
|
||||||
|
"md5": "2bfbf2416d5c593dbdd1bfa9d7ccdb2a"
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://models/backrooms/backrooms_vr_24.png"
|
||||||
|
dest_files=["res://.godot/imported/backrooms_vr_24.png-584f508479d8bb3725096fabaf30673a.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
|
||||||
|
After Width: | Height: | Size: 210 KiB |
@@ -0,0 +1,44 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://doneeapv77gj1"
|
||||||
|
path.s3tc="res://.godot/imported/backrooms_vr_25.png-9c0c3ba7ed9c43115c11c01e6ca76972.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
generator_parameters={
|
||||||
|
"md5": "d4edeb415eeadc87ba7e8b618df82951"
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://models/backrooms/backrooms_vr_25.png"
|
||||||
|
dest_files=["res://.godot/imported/backrooms_vr_25.png-9c0c3ba7ed9c43115c11c01e6ca76972.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
|
||||||
|
After Width: | Height: | Size: 47 KiB |
@@ -0,0 +1,44 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://cg4knissk32f0"
|
||||||
|
path.s3tc="res://.godot/imported/backrooms_vr_26.png-d404be6f8ec663c23a65f332e8e41866.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
generator_parameters={
|
||||||
|
"md5": "b00013d16cea649dbfcad40105ea95c2"
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://models/backrooms/backrooms_vr_26.png"
|
||||||
|
dest_files=["res://.godot/imported/backrooms_vr_26.png-d404be6f8ec663c23a65f332e8e41866.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
|
||||||
|
After Width: | Height: | Size: 815 KiB |
@@ -0,0 +1,44 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://3gy68ac2rkdx"
|
||||||
|
path.s3tc="res://.godot/imported/backrooms_vr_3.png-afd56e334c7320959e31f3683f2ccc4f.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
generator_parameters={
|
||||||
|
"md5": "27c87342265c1142652ee5c1c7de8578"
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://models/backrooms/backrooms_vr_3.png"
|
||||||
|
dest_files=["res://.godot/imported/backrooms_vr_3.png-afd56e334c7320959e31f3683f2ccc4f.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
|
||||||
|
After Width: | Height: | Size: 714 KiB |
@@ -0,0 +1,44 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://d3verocm47dx8"
|
||||||
|
path.s3tc="res://.godot/imported/backrooms_vr_4.png-93a12f44d34aa99fbfe8479f9f95dda0.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
generator_parameters={
|
||||||
|
"md5": "c0f85dfdeb975bc1438901e114ee54f5"
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://models/backrooms/backrooms_vr_4.png"
|
||||||
|
dest_files=["res://.godot/imported/backrooms_vr_4.png-93a12f44d34aa99fbfe8479f9f95dda0.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
|
||||||
|
After Width: | Height: | Size: 635 KiB |
@@ -0,0 +1,44 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://cnhk7o54biy8d"
|
||||||
|
path.s3tc="res://.godot/imported/backrooms_vr_5.png-5c53a0e2465ec929aaf203e355069c55.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
generator_parameters={
|
||||||
|
"md5": "db8e48feaa1472c07f9e3131a9d5455d"
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://models/backrooms/backrooms_vr_5.png"
|
||||||
|
dest_files=["res://.godot/imported/backrooms_vr_5.png-5c53a0e2465ec929aaf203e355069c55.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
|
||||||
|
After Width: | Height: | Size: 888 KiB |
@@ -0,0 +1,44 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://cjglgsq24tgpr"
|
||||||
|
path.s3tc="res://.godot/imported/backrooms_vr_6.png-9ef6d8013d662a2fe026a614c10ff766.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
generator_parameters={
|
||||||
|
"md5": "396d37118c519e43f39dc17472ac44ac"
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://models/backrooms/backrooms_vr_6.png"
|
||||||
|
dest_files=["res://.godot/imported/backrooms_vr_6.png-9ef6d8013d662a2fe026a614c10ff766.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
|
||||||
|
After Width: | Height: | Size: 37 KiB |
@@ -0,0 +1,44 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://7ctu8yeskavl"
|
||||||
|
path.s3tc="res://.godot/imported/backrooms_vr_7.png-08770a42a1db34f7b66ca5ade29b3692.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
generator_parameters={
|
||||||
|
"md5": "01930a0b90aed513040fd3d9eedbb6fe"
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://models/backrooms/backrooms_vr_7.png"
|
||||||
|
dest_files=["res://.godot/imported/backrooms_vr_7.png-08770a42a1db34f7b66ca5ade29b3692.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
|
||||||
|
After Width: | Height: | Size: 898 KiB |
@@ -0,0 +1,44 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://dsjo2hg0a0tel"
|
||||||
|
path.s3tc="res://.godot/imported/backrooms_vr_8.png-d336a3b519d985285c5ac1f5b88e7302.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
generator_parameters={
|
||||||
|
"md5": "59fd1284dc8ae6306679984e51bd09f4"
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://models/backrooms/backrooms_vr_8.png"
|
||||||
|
dest_files=["res://.godot/imported/backrooms_vr_8.png-d336a3b519d985285c5ac1f5b88e7302.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
|
||||||
|
After Width: | Height: | Size: 1.1 MiB |
@@ -0,0 +1,44 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://lg637sqtxhyx"
|
||||||
|
path.s3tc="res://.godot/imported/backrooms_vr_9.png-84b2fc2b5b2304a3aaac1bf9ef43ec9b.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
generator_parameters={
|
||||||
|
"md5": "8c6549152c886a78b26090750a2ac1a4"
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://models/backrooms/backrooms_vr_9.png"
|
||||||
|
dest_files=["res://.godot/imported/backrooms_vr_9.png-84b2fc2b5b2304a3aaac1bf9ef43ec9b.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
|
||||||
@@ -18,6 +18,7 @@ config/icon="res://icon.svg"
|
|||||||
[autoload]
|
[autoload]
|
||||||
|
|
||||||
Net="*res://Net/net.gd"
|
Net="*res://Net/net.gd"
|
||||||
|
MapLoader="*res://World/map_loader.gd"
|
||||||
|
|
||||||
[display]
|
[display]
|
||||||
|
|
||||||
|
|||||||