Полу-кастомный игрок и каталог объектов ремейка

Игрок:
- RsxPlayer extends EntityPlayerSP: наш игрок с нашими числами движения.
- RsxMovementInput extends MovementInputFromOptions: отменяет ванильный
  множитель подкрадывания 0.3 и ставит наш.
- RsxPlayerTuning: подкрадывание 1.5 блока/с (было ~1.3), прыжок 1.35 блока
  (было 1.25). Прыжок считается по высоте: v = 0.42 * sqrt(h / 1.25) = 0.43713.
  Правило пользователя: значение меньше заданного не принимается, остаётся 1.5.
  Переопределяется из командной строки: -Drsx.sneakSpeed, -Drsx.jumpHeight.
- Мобы прыгают как в ванилле: переопределение в RsxPlayer, а не в
  EntityLivingBase.
- Три строки патчей в ванильное дерево: PlayerControllerMP создаёт RsxPlayer,
  Minecraft создаёт RsxMovementInput. Вся логика в нашем коде.
- Форк собирается чисто, 3278 классов.

Каталог:
- tools/catalog-remake.py собирает assets/rustex/CATALOG.md и catalog.json.
- Что нашли у ремейка: 218 предметов (46 одежды, 44 ресурса, 33 оружия, 31
  медицина, 21 инструмент, 17 построек, 11 боеприпасов, 11 разных, 4 ловушки),
  91 объект nextgen (бочки, ящики, двери, верстаки, печи, руда, модели
  монументов), 553 модели .obj (384 оружия с перезарядкой, 128 деталей постройки,
  36 мебели, 4 руды), 133 иконки предметов, 2004 звука, текстуры монументов и
  животных, скины игрока (9 файлов 256x256 плюс 9 с моргающими глазами) в
  assets/rustex/player/.
- Скины игрока - текстуры ремейка, модель тела ванильная.

Декомпил ремейка лежит на диске: G:\src-decoded (5207 файлов, строки
расшифрованы). Поведение клиента можно читать, а не угадывать: конфиг оружия с
отдачей, схема viewmodel, формат данных. Значения же приходят с сервера, в
клиенте только схема и значения по умолчанию.

План дополнен разделами 2.8 (игрок) и 2.9 (декомпил).
This commit is contained in:
sasheg dev
2026-10-21 21:02:46 +03:00
parent c472bd4a8c
commit a6587d55ce
6 changed files with 481 additions and 2 deletions
+45 -2
View File
@@ -753,6 +753,42 @@ ROLE_ELDER / ROLE_CREATOR`).
(MTSDF, 2048×2048, тайлы 64×64) по именам `rusticon` из базы предметов.
- **Пометка: заменить на свои** (см. п. 6).
### 2.8 Игрок: полу-кастомный объект
Игрок — **ванильный, но с нашими числами движения**. Класс `RsxPlayer extends
EntityPlayerSP` (в `src-overlay`), рядом `RsxMovementInput extends
MovementInputFromOptions` и `RsxPlayerTuning` с числами.
| что | ванильно | у нас |
|---|---|---|
| скорость подкрадывания | ~1.30 блока/с (множитель 0.3) | **1.5 блока/с** (множитель 0.34746) |
| высота прыжка | 1.25 блока (импульс 0.42) | **1.35 блока** (импульс 0.43713) |
- Скорость прыжка считается по высоте: `v = 0.42 · √(h / 1.25)`.
- Подкрадывание: ванильный множитель 0.3 отменяется и ставится наш.
- **Правило пользователя:** если задать значение меньше, оно не принимается —
подкрадывание остаётся 1.5 блока/с, прыжок 1.5 блока. Значения по умолчанию
(1.5 и 1.35) через это правило не проходят.
- Переопределяется из командной строки: `-Drsx.sneakSpeed=1.6 -Drsx.jumpHeight=1.4`.
- Мобы прыгают как в ванилле: переопределение живёт в `RsxPlayer`, а не в
`EntityLivingBase`.
- Патчи в ванильное дерево — три строки (`PlayerControllerMP` создаёт
`RsxPlayer`, `Minecraft` создаёт `RsxMovementInput`), вся логика — в нашем коде.
### 2.9 Декомпил ремейка лежит на диске
`G:\src-decoded` (5207 файлов, строки расшифрованы), также `G:\src`,
`G:\builds\v31\src{,-decoded}` и `G:\decompiled-rustex`. Это **исходники клиента
ремейка** — читаемый Java. Значит, поведение клиента можно смотреть, а не
угадывать: конфиг оружия с отдачей (`recoilYawMin`, `recoilPitchMax`,
`ADSScale`, `movementPenalty`, `shotsUntilMax`, `aimconeCurve`), схема
viewmodel (`sway`, `bob`, `crouch`, `lower`, `freeLook`), формат данных —
Unity-подобные ключи (`m_Name`, `MonoBehaviour`), читаются через `ctkmb`.
**Важно:** сами **значения** приходят с сервера (Unity-ассеты), в клиенте есть
только схема и значения по умолчанию. Урон, отдача и спрей огнестрела — серверные
данные; в клиенте только магазин, тип патрона, зум ADS, прочность и reach.
---
## 3. Архитектура
@@ -997,8 +1033,15 @@ rsx-client\scripts\run-game.ps1 # клиент
восстанавливается по сигнатуре формата: PNG — `b[0] ^ 0x89`, OGG — `b[0] ^ 0x4F`,
JSON — `b[0] ^ 0x7B`. Уже декодировано: `assets/rustex/` (1.65 ГБ, 19 тыс. файлов).
Скрипты: `tools/extract-rustex-assets.py`, `tools/extract-items.py`,
`tools/extract-sounds.py`. **Осталось непрочитанным:** 553 `.obj`, 106 `.rrs`,
113 `.nbt` — у них не однобайтовый шифр, нужен разбор кода.
`tools/extract-sounds.py`, `tools/catalog-remake.py`.
**Каталог всего, что есть у ремейка:** `assets/rustex/CATALOG.md` +
`catalog.json` (218 предметов, 91 объект nextgen, 553 модели `.obj`
(384 оружия, 128 постройки, 36 мебели, 4 руды), 133 иконки, 2004 звука,
текстуры монументов и животных, скины игрока в `assets/rustex/player/`).
- ⚠️ **Классы ремейка прочитать нельзя без взлома загрузчика.** Классы в `game.jar`
помечены `DE AD C0 DE` и зашифрованы своим форматом (не однобайтовым XOR, как
ассеты). **Но декомпил лежит на диске** — `G:\src-decoded` (п. 2.9): читать
поведение клиента можно, REA не нужен.
- **Текстуры предметов — временные** (взяты из ремейка как заглушки, иконки из
`assets/rustex/gamejar/assets/rustex/icons/atlas.png`). **ПОМЕТКА: заменить на свои.**
- **База предметов** — `rsx-protocol/src/main/resources/items/items.csv` (218 шт,