DRMD 6DOF — это расширенный аддон для Garry's Mod, добавляющий полнофункциональный боевой движок в режиме 6 степеней свободы. Эта версия включает Оружейную Мастерскую — встроенный редактор для проектирования, настройки и экспорта оружия в реальном времени.
DRMD 6DOF (Descent-Inspired Resource Management Dynamics) — это инновационный боевой аддон для Garry's Mod, вдохновлённый классической серией Descent. Система обеспечивает полную свободу движения в трёхмерном пространстве с полноценной боевой механикой.
- 6DOF контроллер полёта — полная свобода движения в 3D (pitch, yaw, roll)
- Система инерции — реалистичная физика ускорения и торможения
- Динамика вращения — правильные угловые скорости и момент
- Избежание столкновений — адаптивный воздушный конвейер
- Энергетический реестр — управление ресурсами между подсистемами
- Распределение питания — пресеты (Сбалансированный, Атака, Перехват, Осада)
- Восстановление — скорость регенерации зависит от выбранного пресета
- Потребление оружия — каждое оружие имеет энергозатраты
- Многоуровневая защита — корпус + щиты
- Поглощение повреждений — распределение по типам урона (кинетический, энергия, взрыв)
- Восстановление щитов — пассивная регенерация
- Эффекты защиты — визуальная обратная связь при попадании
- Система оружия — модульная архитектура (20+ встроенных типов)
- Типы урона — кинетический, энергия, взрыв, экзотический
- Наведение — различные системы наведения для специализированного оружия
- Проектили и лучи — полная поддержка и хитскана, и физических снарядов
- Враждебные НПЦ — разные классы (Истребители, Перехватчики, Артиллерия, Поддержка)
- AI навигация — интеграция сNav-сеткой Garry's Mod
- Тактическое поведение — групповые манёвры и расчётные атаки
- Динамичный баланс — враги адаптируются к действиям игрока
- Кластеры оружия — модульное расположение деталей (Center, Upper, SideLeft, SideRight, Lower)
- SWEP Construction Kit — визуальный редактор моделей оружия
- HUD система — информативный дисплей энергии, боеприпасов, статуса
- 4 встроенных редактора — Статистика, Снаряд, Осколки, Наведение
- Генерация кода — автоматическое создание SWEP файлов
- Система пресетов — сохранение и загрузка конфигураций
- Live-tuning — изменение параметров оружия в реальном времени
DRMD 6DOF Engine
├── d6_core.lua ← Основной контроллер полёта и движка
├── d6_weapon_core.lua ← Система стрельбы (FireProjectile, урон, наведение)
├── d6_energy.lua ← Энергетическая система (распределение, восстановление)
├── d6_shield.lua ← Система щитов (поглощение, регенерация)
├── d6_ai.lua ← Враги и боевое поведение
├── weapons/ ← 20+ встроенных оружий
│ ├── weapon_d6_mg.lua
│ ├── weapon_d6_plasma.lua
│ ├── weapon_d6_heavy.lua
│ ├── weapon_d6_laser.lua
│ ├── weapon_d6_rockets.lua
│ └── ...
├── swep_construction_kit/ ← SCK (визуальный редактор + Мастерская)
│ ├── schema.lua ← Определение полей
│ ├── config.lua ← Реестр конфигов
│ ├── ui_schema.lua ← Рендер редактора
│ ├── generator.lua ← Генератор кода
│ └── menu/ ← Вкладки редактора
└── autorun/
├── d6_wep_cfg.lua ← Шим для live-tuning
└── d6_weaponworkshop.lua ← Интеграция в меню Q
| Система | Файл | Назначение |
|---|---|---|
| Контроль полёта | d6_core.lua |
6DOF управление, инерция, динамика |
| Оружие | d6_weapon_core.lua |
FireProjectile, урон, наведение, взрывы |
| Энергия | d6_energy.lua |
Распределение, восстановление, потребление |
| Щиты | d6_shield.lua |
Поглощение, регенерация, типы урона |
| Враги | d6_ai.lua |
Поведение, тактика, групповые манёвры |
| Редактор оружия | swep_construction_kit/ |
Визуальное проектирование + код генератор |
| Мастерская | menu/ |
Интегрированный 4-табовый редактор параметров |
- ПУЛЕМЁТ (MG) — лёгкая кинетическая система, быстрый огонь
- ПЛАЗМА (Plasma) — энергетические всплески с AoE
- ТЯЖЁЛЫЙ (Heavy) — взрывной снаряд с большим уроном
- ЛАЗЕР (Laser) — хитскан луч с зарядкой
- РАКЕТЫ (Rockets) — 4 режима (прямой, залп, наведение, нюк)
- РЕЛЬСА (Railgun) — пробивающий кинетический снаряд
- ВУЛКАН (Vulcan) — раскручивающаяся пулемётная система
- КС-РАКЕТА (Concussion) — тяжёлый взрывной снаряд для очистки
- ГСН-РАКЕТА (Homing) — точная ищущая ракета
Система энергии строго уравновешена:
- Сбалансированный (34% на оружие) → 6.72 ед/сек восстановление
- Атака (55%) → 8.40 ед/сек
- Перехват (25%) → 6.00 ед/сек
- Осада (45%) → 7.60 ед/сек
Принцип: все оружия требуют больше энергии чем восстановление → вынуждает тактическую игру (очередями, а не непрерывно).
Оружейная Мастерская обеспечивает полный цикл разработки оружия для DRMD:
Полнофункциональный редактор с 4 интегрированными вкладками:
- Статистика — базовые параметры (имя, класс, категория, тип, скорострельность, урон, энергозатраты)
- Снаряд — физика и баллистика (модель, масса, гравитация, затухание, время жизни, наведение)
- Осколки — кассетные системы (количество, разброс, детонация, параметры фрагментов)
- Наведение — системы наведения (тепловое, целевое, луч, прогнозирование)
Автоматическое создание полноценного SWEP .lua файла:
- Экспорт в буфер обмена
- Сохранение в
DATA/drmd_weapons/generated/ - Готовый к использованию код, вызывающий
D6_Wep.FireProjectile
- Сохранение / загрузка конфигураций
- Клонирование готовых конфигов
- Встроенные шаблоны (Пушка, Ракета, Осколки, Ищущая ракета)
- Сохранение всех состояний (модели, боне-моды, параметры оружия, кластеры)
Один универсальный рендер питается от описаний полей — легко расширяемо без изменения кода интерфейса.
Определяет структуру полей для 4 категорий параметров оружия:
SCK_SCHEMA.weapon -- Механика (имя, тип, урон, энергия и т.д.)
SCK_SCHEMA.projectile -- Физика снаряда (модель, масса, время жизни)
SCK_SCHEMA.flak -- Кассетные системы (осколки, детонация)
SCK_SCHEMA.guidance -- Наведение (тепловое, целевое, прогнозирование)Система хранения и синхронизации:
- Хранение конфигов в памяти
- Сохранение на диск (glon-кодирование в
DATA/drmd_weapons/) - Синхронизация сервер ↔ клиенты через
net.Send - Поддержка расширений схемы
Универсальный строитель панелей:
SCK_BuildSchemaPanel(panel, schema, data, onChange)Автоматически создаёт нужные элементы управления:
int/float→DNumSliderstring→DTextEntrybool→DCheckBoxLabelenum→DComboBox
- Планирование — Определите роль оружия в арсенале DRMD (антиперехват, тяжёлое, поддержка)
- Проектирование в Мастерской — Используйте 4 редактора для настройки параметров
- Проверка энергобюджета — Убедитесь, что энергозатраты уравновешены с восстановлением
- Генерация кода — Экспортируйте SWEP Lua
- Тестирование в игре — Спавните оружие, проверьте поведение против врагов
- Live-tuning — Отредактируйте параметры в Мастерской, измените в реальном времени
- Сохранение пресета — Зафиксируйте финальную конфигурацию
- Интеграция — Добавьте оружие в D6_COMBAT или назначьте врагам
Требование: быстрая наводящаяся ракета для боёв с истребителями
Шаги:
-
Статистика:
- PrintName: "Ищущая ракета"
- Category: "Anti-Fighter"
- FireRate: 3.5 сек (дорогая, редкая)
- Damage: 60
- EnergyCost: 28
- SplashRadius: 160
-
Снаряд:
- Model: "models/weapons/w_missile.mdl"
- InitialVelocity: 1400 u/s
- Lifetime: 15 сек
- Homing: true
- TurnRate: 4.5
-
Наведение:
- GuidanceType: "target"
- TargetSeeking: true
- LockTime: 0.5 сек
- TrackingCone: 60°
-
Кластеры:
- Center: пусковая установка
- Lower: стабилизаторы
-
Генерация → "Copy SWEP Lua"
-
Тестирование → спавните
weapon_d6_customпротив врагов-истребителей -
Балансировка → измените TurnRate/LockTime в Мастерской, видите результат в реальном времени
Было:
-- weapon_d6_laser.lua
local ENERGY_COST = 22
local FIRE_RATE = 0.40
local DIRECT_DMG = 40Стало:
-- weapon_d6_laser.lua
local ENERGY_COST = D6_Wep.Cfg("weapon_d6_laser", "weapon", "EnergyCost", 22)
local FIRE_RATE = D6_Wep.Cfg("weapon_d6_laser", "weapon", "FireRate", 0.40)
local DIRECT_DMG = D6_Wep.Cfg("weapon_d6_laser", "weapon", "Damage", 40)Теперь: можно настраивать лазер в Мастерской без перезагрузки игры.
- Дайте себе SCK →
give swep_construction_kit - Откройте меню → ЛКМ или ПКМ
- Вкладка "Статистика" → Установите имя, тип, скорострельность, урон
- Вкладка "Снаряд" → Модель, масса, скорость, наведение
- Вкладка "Осколки" (опционально) → Взрыв с разбросом фрагментов
- Вкладка "Наведение" (опционально) → Параметры наведения
- Вкладка "Кластеры" → Добавьте детали оружия (стволы, пусковые установки и т.д.)
- Кнопка "Копировать код SWEP" → Вставьте в файл оружия
- Кнопка "Сохранить" → Сохраните полную конфигурацию
Старое оружие с жёсткокодированными параметрами:
local ENERGY_COST = 20
local FIRE_RATE = 0.8
local DIRECT_DMG = 80Сделайте его живо-настраиваемым:
local ENERGY_COST = D6_Wep.Cfg("weapon_d6_custom", "weapon", "EnergyCost", 20)
local FIRE_RATE = D6_Wep.Cfg("weapon_d6_custom", "weapon", "FireRate", 0.8)
local DIRECT_DMG = D6_Wep.Cfg("weapon_d6_custom", "weapon", "Damage", 80)Или оставьте как есть — старые оружия продолжат работать без изменений.
swep_construction_kit/
├── lua/weapons/swep_construction_kit/
│ ├── shared.lua # Метаданные, загрузка конфигов
│ ├── client.lua # Создание меню, 8 вкладок
│ ├── base_code.lua # Конвейер рендера + расширение кластеров
│ ├── glon.lua # Сериализатор
│ ├── config.lua # Реестр + синхронизация + сохранение
│ ├── schema.lua # 4 схемы полей
│ ├── ui_schema.lua # Универсальный рендер
│ ├── generator.lua # Генератор кода
│ └── menu/
│ ├── weaponparams.lua # Вкладка "Статистика" + панель пресетов
│ ├── projectile.lua # Вкладка "Снаряд"
│ ├── flak.lua # Вкладка "Осколки"
│ └── guidance.lua # Вкладка "Наведение"
descent_scanner/lua/autorun/
├── d6_wep_cfg.lua # Шим DRMD (функция Cfg + расширения)
└── d6_weaponworkshop.lua # Панель Мастерской в меню Q
Оружейная Мастерская разработана как дополнение к DRMD Engine, но остаётся полностью независимой:
- Генерирует оружие для DRMD — создаёт SWEP файлы, вызывающие
D6_Wep.FireProjectile() - Использует D6_DAMAGE taxonomy — интегрируется с системой типов урона DRMD
- Поддерживает энергосистему — оружие потребляет энергию через
D6_Energy.TryConsume() - Совместимо с щитами — урон проходит через
D6_Wep.DirectDamage()иD6_Wep.SplashDamage()
- Работает без DRMD — генерирует валидные SWEP файлы
- Независимое сохранение — пресеты хранятся локально, не требуют DRMD
- Универсальный редактор — можно использовать для любых SWEPs, не только DRMD оружия
function D6_Wep.Cfg(class, section, key, default)
if not SCK_Config then return default end
local cfg = SCK_Config.Get(class)
if not cfg then return default end
return cfg[section][key] or default
endНазначение: Позволяет оружию читать конфигурацию из реестра вместо жёсткокодированных локальных переменных. Если SCK отсутствует, возвращает значение по умолчанию.
SCK_Config.RegisterSchemaExtension("weapon", "Category", {
"Anti-Fighter", "Anti-Capital", "Siege",
})
SCK_Config.RegisterSchemaExtension("weapon", "AmmoType", {
"gravitic", "dark_energy",
})Добавляет DRMD-специфичные категории и типы боеприпасов в редактор.
Сгенерированное оружие автоматически интегрируется с:
- D6_Wep.FireProjectile() — физический снаряд с наследованием скорости
- D6_Wep.DirectDamage() — прямой урон с отталкиванием
- D6_Wep.SplashDamage() — AoE взрывной урон
- D6_Wep.ApplyRecoil() — отдача оружия
- D6_Energy.TryConsume() — потребление энергии
- D6_DAMAGE классы — кинетический, энергия, взрыв, экзотический
d6_weaponworkshop.lua добавляет:
- Список сохранённых пресетов
- Встроенные архетипы оружия
- Батарейный экспорт
Полный, валидный SWEP файл:
-- Generated by DRMD Weapon Workshop (SCK)
AddCSLuaFile()
SWEP.PrintName = "Custom Weapon"
-- ... метаданные ...
local ENERGY_COST = 10
local FIRE_RATE = 0.5
-- ... константы из конфига ...
function SWEP:PrimaryAttack()
if not D6_Energy.TryConsume(owner, "weapons", ENERGY_COST) then return end
D6_Wep.FireProjectile({
owner = owner,
pos = pos,
dir = dir,
speed = PROJ_SPEED,
model = "...",
dmgClass = "kinetic",
-- ... параметры из projectile ...
})
end✅ Автоматическое обнаружение типа оружия (снаряд vs хитскан)
✅ Интеграция с D6_Wep.FireProjectile
✅ Обработка попадания с урон + взрыв
✅ Цикл создания осколков (если включено)
✅ Блок WeaponClusters (если наличествует)
✅ Комментарий о пути миграции на D6_Wep.Cfg()
save_data = {
-- Существующие поля SCK
v_models, w_models, v_bonemods,
ViewModel, CurWorldModel, ViewModelFOV,
clusters, -- Из вкладки "Кластеры"
-- НОВОЕ: конфигурация оружия (все 4 раздела)
weaponconfig = {
weapon = {...},
projectile = {...},
flak = {...},
guidance = {...}
}
}- Гарантирует:
DATA/swep_construction_kit/<имя>.txt - Формат: glon-кодированная таблица Lua
- Загрузка одного пресета восстанавливает все 4 вкладки редактора
- Откройте SCK → видны вкладки "Статистика", "Снаряд", "Осколки", "Наведение"
- Каждое поле отрендерено правильным элементом управления
- Заголовки разделов группируют поля
- Измените Урон слайдером → реестр обновляется в реальном времени
- Закройте и откройте меню → значение сохранилось
- Значение синхронизируется на сервер
- Клик "Копировать код SWEP" → код в буфере обмена
- Вставьте в файл →
luajit -blпарсит без ошибок - Спавните оружие → снаряд летит с настроенной скоростью/уроном
- Сохраните → загрузите → полная конфигурация восстановлена
- Клонируйте → новое имя
- Примените шаблон (Пушка/Ракета/Осколки/Ищущая) → загрузилась конфигурация
- Удалите DRMD → SCK редактор работает, генерация работает, пресеты работают
- Удалите SCK → DRMD загружается без ошибок,
D6_Wep.Cfg()возвращает значения по умолчанию
- Существующее оружие стреляет без изменений (не читает реестр)
- Вкладки визуальных элементов/кластеров работают
- Конвейер рендера не изменился
-
Живая применение конфига:
- Оружие, вызывающее
D6_Wep.Cfg(), перечитывает константы при трансляции конфига - Развёрнутое оружие можно настраивать без перезагрузки игры
- Оружие, вызывающее
-
Браузер пресетов в меню Q:
- Список сохранённых пресетов
- Загрузка в SCK одним кликом
- Батарейный экспорт в аддон
-
Система версий пресетов:
- Резервные копии с временными метками
- Восстановление старой версии
-
Миграция существующего оружия:
- Поэтапный переход 20+ оружий на
D6_Wep.Cfg() - Неломающееся изменение (старые оружия продолжают работать)
- Поэтапный переход 20+ оружий на
- WEAPON_WORKSHOP_README.md — Подробная техническая документация на английском
- Одна функция рендера питается от описаний полей
- Четыре вкладки отличаются только схемой
- Легко добавить новую вкладку: просто добавьте схему
- Изменения применяются мгновенно
- Синхронизация между клиентами через net
- Старые оружия не трогаются (opt-in миграция)
- SCK работает без DRMD
- DRMD использует SCK как опциональный инструмент
- Однонаправленная зависимость: DRMD → SCK, SCK ↛ DRMD
- Полный, валидный Lua (не только константы)
- Вывод осведомлён о фреймворке
D6_Wep - Готов к использованию в игре
Система модульна и расширяема:
- Добавить поле в схему? Отредактируйте
schema.lua, оно авто-отрендерится - Добавить тип элемента управления? Добавьте case в
ui_schema.lua - Добавить выбор DRMD? Вызовите
SCK_Config.RegisterSchemaExtension()изd6_wep_cfg.lua - Расширить генератор? Добавьте логику в
BuildSWEPString()вgenerator.lua
Весь код находится в пространстве имён SCK_* (публичный API) или file-local. Нет глобальных переменных.
- Garry's Mod (исходный движок Source, не Next)
- LuaJIT (для парсинга сгенерированного кода)
- DRMD 6DOF (опционально, для расширений и шима)
Часть проекта расширенного аддона DRMD 6DOF для Garry's Mod. См. основной репозиторий для получения подробной информации о лицензии.
- Ветка разработки:
claude/trusting-dijkstra-xuin48 - Последний коммит: Полный редактор оружия со всеми 4 вкладками + генератор
- SWEP Construction Kit: Оригинальный аддон Clavus для редактирования viewmodels
Разработано для DRMD 6DOF — расширенного боевого опыта в режиме полной свободы движения.