Files
aibrashandClaude Sonnet 5.5 9130202a51 Карта Race: гонка на ногах по киберпанк-антиутопии, 8 игроков
- maps/race: трасса 633 м из Blender (три развилки: срез по контейнерам, каньон со стенами
  против нижней дороги, труба с лазерами против коридора), запечённый свет, небо, дождь, гул;
  фоновая песня (Ogg Vorbis, ~0,6 МБ) включается на «СТАРТ!»
- Правила (race_rules.gd): R — готов; когда готовы все — отсчёт 6 с, заморозка в слотах,
  ворота строго по порядку, сплиты, место, итоги, личный рекорд (user://race_best.cfg)
- Сеть: Net.submit_race / recv_race / race_event (RACE_READY, START, CP, FINISH, STATE).
  ВНИМАНИЕ: набор RPC изменён — клиент и сервер выкладываются вместе, старый клиент
  с новым сервером не работает (rpc node checksum failed)
- player.gd: input_frozen и place() для режимов карт; project.godot: действие ready (R)
- Портал RACE в хабе, пресет экспорта Race (include_filter для ресурсов, грузимых строкой)
- tools/test: двухклиентный тест гонки на локальном сервере, бот, облёт, проверка пакета
- README: правила гонки, события, проверки, заметки

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WxZo3ekR5m1af437Qzqwc1
2026-10-28 17:28:05 +05:00

49 lines
2.4 KiB
GDScript

# Сгенерировано Blender models/race_01/build_race.py из layout.py — не править руками
extends RefCounted
# Старт: 8 слотов в ряд поперёк трассы, лицом по трассе (-Z); центр капсулы
const START_SLOTS := [
Vector3(-9.80, 1.25, -28.00),
Vector3(-7.00, 1.25, -28.00),
Vector3(-4.20, 1.25, -28.00),
Vector3(-1.40, 1.25, -28.00),
Vector3(1.40, 1.25, -28.00),
Vector3(4.20, 1.25, -28.00),
Vector3(7.00, 1.25, -28.00),
Vector3(9.80, 1.25, -28.00),
]
# Ворота по порядку: [центр капсулы на полу ворот, полуширина поперёк трассы (м), рыскание (град; 0 = -Z, -90 = на +X)]. Последний = ФИНИШ
# На развилках ворота стоят только в общих местах (после слияния веток), поэтому между ними бывает до ~170 м.
const CHECKPOINTS := [
[Vector3(0.00, 1.20, -78.00), 13.0, 0.0], # cp1
[Vector3(0.00, 5.70, -114.00), 8.0, 0.0], # cp2
[Vector3(66.00, 5.70, -195.00), 12.0, -90.0], # cp3
[Vector3(99.00, 6.20, -195.00), 13.0, -90.0], # cp4
[Vector3(150.00, 4.70, -195.00), 13.0, -90.0], # cp5
[Vector3(163.00, 0.40, -306.00), 10.0, 0.0], # cp6
[Vector3(162.00, -5.70, -362.00), 12.0, 0.0], # cp7
[Vector3(161.00, -5.70, -440.00), 28.0, 0.0], # cp8
]
# Лазеры: центр, размер, режим (0 — всегда, 1 — пульсирует), период, время включения, сдвиг
const LASERS := [
[Vector3(170.50, -6.45, -385.25), Vector3(5.00, 0.90, 0.50), 0, 0.00, 0.00, 0.00], # t_floor
[Vector3(170.50, -5.30, -397.25), Vector3(5.00, 0.60, 0.50), 1, 2.60, 1.30, 0.00], # t_mid
]
# Ангар (для отключения дождя): x0, x1, y0(+Z), y1, пол, потолок; в координатах Godot по Z — расстояние по трассе со знаком минус
const HALL_X0 := 148.0
const HALL_X1 := 173.0
const HALL_Z0 := -416.0
const HALL_Z1 := -364.0
const HALL_FLOOR := -6.9
const HALL_CEIL := 2.1
# Портал в хаб за финишем: позиция на полу площадки
const PORTAL := Vector3(161.00, -6.90, -490.00)
# Длина безопасного маршрута, м
const TRACK_LENGTH := 632.9
# Срыв: на столько ниже последнего чекпоинта — возрождение
const KILL_DEPTH := 32.0