Skip to content

Repository files navigation

DRMD 6DOF — Оружейная Мастерская

Workshop Status Garry's Mod

DRMD 6DOF — это расширенный аддон для Garry's Mod, добавляющий полнофункциональный боевой движок в режиме 6 степеней свободы. Эта версия включает Оружейную Мастерскую — встроенный редактор для проектирования, настройки и экспорта оружия в реальном времени.


📖 О DRMD 6DOF

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

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


🎯 Основные возможности

Оружейная Мастерская обеспечивает полный цикл разработки оружия для DRMD:

Оружейная Мастерская

Полнофункциональный редактор с 4 интегрированными вкладками:

  • Статистика — базовые параметры (имя, класс, категория, тип, скорострельность, урон, энергозатраты)
  • Снаряд — физика и баллистика (модель, масса, гравитация, затухание, время жизни, наведение)
  • Осколки — кассетные системы (количество, разброс, детонация, параметры фрагментов)
  • Наведение — системы наведения (тепловое, целевое, луч, прогнозирование)

Генерация кода

Автоматическое создание полноценного SWEP .lua файла:

  • Экспорт в буфер обмена
  • Сохранение в DATA/drmd_weapons/generated/
  • Готовый к использованию код, вызывающий D6_Wep.FireProjectile

Система пресетов

  • Сохранение / загрузка конфигураций
  • Клонирование готовых конфигов
  • Встроенные шаблоны (Пушка, Ракета, Осколки, Ищущая ракета)
  • Сохранение всех состояний (модели, боне-моды, параметры оружия, кластеры)

Архитектура, управляемая схемой

Один универсальный рендер питается от описаний полей — легко расширяемо без изменения кода интерфейса.


🏗️ Архитектура

Трёхслойная система

1️⃣ Слой схем (schema.lua)

Определяет структуру полей для 4 категорий параметров оружия:

SCK_SCHEMA.weapon      -- Механика (имя, тип, урон, энергия и т.д.)
SCK_SCHEMA.projectile  -- Физика снаряда (модель, масса, время жизни)
SCK_SCHEMA.flak        -- Кассетные системы (осколки, детонация)
SCK_SCHEMA.guidance    -- Наведение (тепловое, целевое, прогнозирование)

2️⃣ Реестр конфигураций (config.lua)

Система хранения и синхронизации:

  • Хранение конфигов в памяти
  • Сохранение на диск (glon-кодирование в DATA/drmd_weapons/)
  • Синхронизация сервер ↔ клиенты через net.Send
  • Поддержка расширений схемы

3️⃣ Рендер интерфейса (ui_schema.lua)

Универсальный строитель панелей:

SCK_BuildSchemaPanel(panel, schema, data, onChange)

Автоматически создаёт нужные элементы управления:

  • int/floatDNumSlider
  • stringDTextEntry
  • boolDCheckBoxLabel
  • enumDComboBox

🎮 Игровой цикл DRMD + Мастерская

Полный процесс разработки оружия

  1. Планирование — Определите роль оружия в арсенале DRMD (антиперехват, тяжёлое, поддержка)
  2. Проектирование в Мастерской — Используйте 4 редактора для настройки параметров
  3. Проверка энергобюджета — Убедитесь, что энергозатраты уравновешены с восстановлением
  4. Генерация кода — Экспортируйте SWEP Lua
  5. Тестирование в игре — Спавните оружие, проверьте поведение против врагов
  6. Live-tuning — Отредактируйте параметры в Мастерской, измените в реальном времени
  7. Сохранение пресета — Зафиксируйте финальную конфигурацию
  8. Интеграция — Добавьте оружие в D6_COMBAT или назначьте врагам

Пример: проектирование ракеты класса "Перехват"

Требование: быстрая наводящаяся ракета для боёв с истребителями

Шаги:

  1. Статистика:

    • PrintName: "Ищущая ракета"
    • Category: "Anti-Fighter"
    • FireRate: 3.5 сек (дорогая, редкая)
    • Damage: 60
    • EnergyCost: 28
    • SplashRadius: 160
  2. Снаряд:

    • Model: "models/weapons/w_missile.mdl"
    • InitialVelocity: 1400 u/s
    • Lifetime: 15 сек
    • Homing: true
    • TurnRate: 4.5
  3. Наведение:

    • GuidanceType: "target"
    • TargetSeeking: true
    • LockTime: 0.5 сек
    • TrackingCone: 60°
  4. Кластеры:

    • Center: пусковая установка
    • Lower: стабилизаторы
  5. Генерация → "Copy SWEP Lua"

  6. Тестирование → спавните weapon_d6_custom против врагов-истребителей

  7. Балансировка → измените TurnRate/LockTime в Мастерской, видите результат в реальном времени

Пример: миграция старого оружия на live-tuning

Было:

-- 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)

Теперь: можно настраивать лазер в Мастерской без перезагрузки игры.


🎮 Использование Мастерской

Проектирование нового оружия

  1. Дайте себе SCKgive swep_construction_kit
  2. Откройте меню → ЛКМ или ПКМ
  3. Вкладка "Статистика" → Установите имя, тип, скорострельность, урон
  4. Вкладка "Снаряд" → Модель, масса, скорость, наведение
  5. Вкладка "Осколки" (опционально) → Взрыв с разбросом фрагментов
  6. Вкладка "Наведение" (опционально) → Параметры наведения
  7. Вкладка "Кластеры" → Добавьте детали оружия (стволы, пусковые установки и т.д.)
  8. Кнопка "Копировать код SWEP" → Вставьте в файл оружия
  9. Кнопка "Сохранить" → Сохраните полную конфигурацию

Миграция существующего оружия

Старое оружие с жёсткокодированными параметрами:

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

Оружейная Мастерская разработана как дополнение к DRMD Engine, но остаётся полностью независимой:

  • Генерирует оружие для DRMD — создаёт SWEP файлы, вызывающие D6_Wep.FireProjectile()
  • Использует D6_DAMAGE taxonomy — интегрируется с системой типов урона DRMD
  • Поддерживает энергосистему — оружие потребляет энергию через D6_Energy.TryConsume()
  • Совместимо с щитами — урон проходит через D6_Wep.DirectDamage() и D6_Wep.SplashDamage()

SCK полностью автономен

  • Работает без DRMD — генерирует валидные SWEP файлы
  • Независимое сохранение — пресеты хранятся локально, не требуют DRMD
  • Универсальный редактор — можно использовать для любых SWEPs, не только DRMD оружия

DRMD добавляет:

1. Функция D6_Wep.Cfg() (d6_wep_cfg.lua)

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 отсутствует, возвращает значение по умолчанию.

2. Расширения схемы

SCK_Config.RegisterSchemaExtension("weapon", "Category", {
    "Anti-Fighter", "Anti-Capital", "Siege",
})
SCK_Config.RegisterSchemaExtension("weapon", "AmmoType", {
    "gravitic", "dark_energy",
})

Добавляет DRMD-специфичные категории и типы боеприпасов в редактор.

3. Взаимодействие с боевой системой DRMD

Сгенерированное оружие автоматически интегрируется с:

  • D6_Wep.FireProjectile() — физический снаряд с наследованием скорости
  • D6_Wep.DirectDamage() — прямой урон с отталкиванием
  • D6_Wep.SplashDamage() — AoE взрывной урон
  • D6_Wep.ApplyRecoil() — отдача оружия
  • D6_Energy.TryConsume() — потребление энергии
  • D6_DAMAGE классы — кинетический, энергия, взрыв, экзотический

4. Панель Мастерской в меню Q

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() возвращает значения по умолчанию

Без регрессии

  • Существующее оружие стреляет без изменений (не читает реестр)
  • Вкладки визуальных элементов/кластеров работают
  • Конвейер рендера не изменился

🚀 Следующие шаги

Опционально (после Wave 1)

  1. Живая применение конфига:

    • Оружие, вызывающее D6_Wep.Cfg(), перечитывает константы при трансляции конфига
    • Развёрнутое оружие можно настраивать без перезагрузки игры
  2. Браузер пресетов в меню Q:

    • Список сохранённых пресетов
    • Загрузка в SCK одним кликом
    • Батарейный экспорт в аддон
  3. Система версий пресетов:

    • Резервные копии с временными метками
    • Восстановление старой версии
  4. Миграция существующего оружия:

    • Поэтапный переход 20+ оружий на D6_Wep.Cfg()
    • Неломающееся изменение (старые оружия продолжают работать)

📚 Документация


🎨 Дизайн-решения

1. Управляемая схемой архитектура

  • Одна функция рендера питается от описаний полей
  • Четыре вкладки отличаются только схемой
  • Легко добавить новую вкладку: просто добавьте схему

2. Живой реестр + сохранение на диск

  • Изменения применяются мгновенно
  • Синхронизация между клиентами через net
  • Старые оружия не трогаются (opt-in миграция)

3. Полная автономия SCK

  • SCK работает без DRMD
  • DRMD использует SCK как опциональный инструмент
  • Однонаправленная зависимость: DRMD → SCK, SCK ↛ DRMD

4. Генерация кода, не только конфиг

  • Полный, валидный 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 — расширенного боевого опыта в режиме полной свободы движения.

About

ddd

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages