SDK v2
SDK для модов
Мод — это одна папка. В ней может быть что угодно в любом сочетании: тренировочные сценарии, паки звуков, темы интерфейса, скайбоксы и текстуры. Здесь описана версия SDK 2 — та, что в текущей бета-сборке.
С чего начать
- Откройте
Документы/My Games/AimWorks/Mods/(игра создаёт её сама; на странице Моды есть кнопка «Открыть папку»). - Создайте папку мода, например
MyMod, и положите в неёmod.json. - Добавьте папки с контентом (см. ниже) и перезапустите игру. Мод появится на странице Моды.
Структура папки
MyMod/
mod.json required
preview.png Workshop picture (16:9, < 1 MB)
scenarios/*.json training scenarios → tag "Scenarios"
sounds/*.wav|ogg|mp3 sound pack, any event → "Sound Packs"
sounds/Shot|Hit|Kill|Miss|UI/ sound pack, one event
themes/*.json interface themes → "Themes"
skyboxes/*.png|jpg equirectangular skies (2:1) → "Skyboxes"
textures/*.png|jpg wall / floor textures → "Textures"
Теги Workshop ставятся автоматически по содержимому папки, и игроки могут фильтровать по типу контента.
mod.json
{
"id": "mymod",
"name": "My Mod",
"author": "you",
"version": "1.0.0",
"description": "What it adds",
"sdkVersion": 2
}
После первой загрузки игра сама допишет в этот файл workshopId, и кнопка Обновить в Workshop будет обновлять тот же предмет.
Сценарии
Формат такой же, как у встроенных сценариев. Игрок стоит в начале координат и смотрит в сторону +Z, расстояния в метрах. При загрузке значения ограничиваются безопасными пределами. Поля-списки вроде move или shape принимают название ("move": "Strafe") или число ("move": 1).
{
"id": "tiny_strafe",
"name": "Tiny Strafe",
"category": "Tracking",
"difficulty": 3,
"duration": 60,
"fireMode": "Auto",
"rpm": 600,
"radius": 0.2,
"health": 0,
"maxTargets": 1,
"move": "Strafe",
"speedMin": 3,
"speedMax": 5,
"spawnCenter": { "x": 0, "y": 1.6, "z": 9 },
"spawnSize": { "x": 8, "y": 0.4, "z": 0 },
"scorePerHit": 10
}
| Поле | Что значит |
|---|---|
id, name, description | id автоматически получает префикс: mod.<modId>.<id> |
category | 0 трекинг, 1 клики, 2 свитчинг |
difficulty | 1–5 |
duration | секунды, 10–300 (по умолчанию 60) |
fireMode, rpm | 0 одиночный, 1 автомат; rpm 60–1200 |
shape | 0 сфера, 1 капсула, 2 плитка, 3 таблетка, 4 Duo |
radius, radiusJitter | метры; radiusJitter 0.3 = каждая цель случайно на 30% меньше или больше |
height, health | высота таблетки/капсулы; health 0 = неуязвимая цель |
maxTargets, layout, gridCols, gridRows | layout 0 случайно, 1 сетка |
minSpawnSeparation | минимальное расстояние между целями, м |
spawnCenter, spawnSize | {"x":0,"y":1.6,"z":10} |
move | 0 стоит, 1 стрейф, 2 плавно, 3 прыжки, 4 дрейф, 5 дуга, 6 воздух |
speedMin, speedMax, changeMin, changeMax | скорость в м/с; смена направления каждые changeMin–changeMax секунд |
driftTurns, verticalAmp, gravity, startLeft | driftTurns: цели в дрейфе резко поворачивают; gravity для прыжков |
scorePerHit, scorePerKill, killTimeBonus, penalizeMiss, missPenalty | начисление очков |
room | studio, neon, hangar, skydeck, bunker, arena, courtyard, void |
Сценарии из модов никогда не попадают в официальные лидерборды и рейтинг ЭЛО.
Темы
Тема перекрашивает весь интерфейс. Цвета в формате HTML hex, можно с прозрачностью (#RRGGBBAA). Если поле не указано, остаётся стандартный цвет AimWorks. Игрок выбирает тему в Настройки → Общие → Тема интерфейса, применяется после перезапуска.
{
"id": "sunset",
"name": "Sunset",
"accent": "#FF7A45",
"accentBright": "#FFA67D",
"cyan": "#FFD166",
"bg": "#140A08EB",
"panel": "#21110DEB",
"panelLight": "#2E1913F2",
"stroke": "#FF7A4538",
"text": "#FFF4EE",
"textDim": "#D9B8A8",
"textMuted": "#8C6E62",
"good": "#52E08F",
"warn": "#FFC24D",
"bad": "#FF4D5E",
"gold": "#FFD24D"
}
Паки звуков
Файлы из sounds/ доступны для любого события. Файлы из sounds/Shot, Hit, Kill, Miss или UI — только для своего события. Лучше всего короткие нормализованные WAV или OGG (выстрел — до 0,4 с). Выбираются в Настройки → Звук.
Скайбоксы и текстуры
skyboxes/: эквиректангулярные панорамы (2:1), PNG или JPG, появляются в Настройки → Небо. textures/: бесшовные текстуры для стен и пола, игра повторяет текстуру каждые 4 метра.
Свои папки (без мода)
Для себя можно вообще без mod.json: кидайте файлы в Документы/My Games/AimWorks/ — Sounds/ (с теми же подпапками), Music/ для плеера в меню, Skyboxes/ (панорамы или 6-сторонние скайбоксы zip-архивом или папкой) и Textures/.
Steam Workshop
С релизом в Steam у каждого локального мода на странице Моды появится кнопка Опубликовать. Положите preview.png (16:9, до 1 МБ) — это картинка в Workshop. Игроки смотрят и подписываются в Играть → Steam Workshop; подписанные предметы загружаются как локальные моды после перезапуска.
Обновления и ошибки
- Обновления игры не ломают моды. Поля никогда не переименовываются и не удаляются, номера существующих значений не меняются, а у новых полей значение по умолчанию сохраняет старое поведение. Каждая сборка игры проверяется на это автоматически.
- Указывайте в
mod.jsonту версиюsdkVersion, под которую делали мод. Если формат когда-нибудь придётся изменить, игра сама переведёт старые моды при загрузке. - Мод для более новой версии SDK, чем знает ваша игра, не загрузится, и страница Моды напишет почему.
- Ошибки видны, а не прячутся: опечатки в названиях полей (с подсказкой), неизвестные значения, числа вне пределов и битые файлы показываются на странице Моды и в файле
aimworks_mods_log.txtв папке Mods (обновляется при каждом запуске).
Правила
- Только то, что вы сделали сами или на что есть лицензия для распространения.
- Без настоящих названий оружия и брендов, без логотипов, без музыки под авторским правом.
- Без контента, разжигающего ненависть, сексуального или незаконного.
- Комнаты и оружие пока моддить нельзя.