Вступ
Поточна версія - 0.20
Отже, став зрозумілий формат all.spawn файлу. є ще багато неясного, але сподіваюся, що справа таки не застрягне на півдорозі.
Програма дозволяє переглядати ресурси спавн файлу в зручнішому вигляді, ніж просто в шістнадцятковому редакторі. Надалі програма легко перетвориться на редактор ресурсів, якщо виникне така потреба.
Головне її завдання на даний момент - допомогти детальніше розібрати формат спавн файлу для можливості вільного оперування його ресурсами до появи офіційних інструментів від розробника. Для цього в програмі існує невеликий скриптовий парсер, що налаштовується, що дозволяє самостійно виділяти цікаві місця у файлі для подальшого аналізу.
Опис роботи
Для початку роботи необхідно мати сам редактор, файл all.spawn будь-якої версії, і файли схем (про них детальніше). Співн має бути в одному каталозі із програмою. Стартуємо, і залежно від потужності комп'ютера отримуємо головне вікно за кілька десятків секунд.
Докладніше про формат all.spawn можна подивитися тут недалеко . Саме там я і сподіваюся побачити поповнення інформації. Починаємо розбиратись, де у нас що знаходиться. Описую зліва направо зверху донизу. Відразу обмовтеся, що майже всі зсуви в програмі вказані щодо початку секції, а не початку файлу.
- Ліва частина.
- 4 основні секції all.spawn файлу. Ми з вами тільки починаємо розбирати другу, тож ще 2 попереду. Тому крім другої нам поки що нічого треба, та й при старті автоматично переходимо куди нам треба.
- Запакована секція. Розміри, усунення, нічого цікавого.
- Перераховано номери всіх ігрових об'єктів, вказано їх зміщення та розміри. Також є два поля для введення номерів об'єктів (швидкий перехід) і кнопка для поперемінного показу двох заздалегідь заданих об'єктів.
- Заголовок вибраного об'єкта. Лише розміри. 4 тире – це вміст вкладених секцій, який видно на наступній частині.
- Центральна частина
- (Зверху) Перша секція об'єкта. Завжди є. Містить ім'я об'єкта, його координати, версію гри та вкладену секцію
- (Знизу) Друга секція об'єкта. Іноді є. Якщо є, містить копію даних з першої секції.
- (праворуч) Зміст вкладеної секції, найзагадковішої на даний момент.
- Права частина.
- Ось тут якраз і знаходиться парсер, що налаштовується. Ця частина є найпростішим текстовим редактором.
- Кнопки
- Hex - викликає додаткове вікно з шістнадцятковим поданням секції
- Показати\сховати скрипти - якщо об'єкт має вбудовані скрипти, то викликається вікно для їх просмтора
- Стрибок - при заповнених полях по обидва боки від кнопки циклічно перемикається між двома об'єктами
- Перевантажити схеми – повторне застосування схеми до вибраного об'єкта у разі редагування зовнішніми інструментами.
- Записати схему - записуються внесені зміни зроблені у програмі, схема застосовується заново.
Схеми
Теоретично існує єдиний опис всіх об'єктів, що дозволяє задати будь-який з них одним формулюванням. Практично об'єкти досить різні, і здавалося б (та й другого) мають значні відмінності. Для пошуку цього єдиного формулювання, або формату об'єкта, раніше я копіював у хексі об'єкт у блокнот і ручками ділив на байти, на двійки, на четвірки щоб знайти межі або конкрені значення.
Потім це набридло і з'явився SpawnEd . Я хотів знайти схожі об'єкти, щоб у результаті загнати їх під один гребінець (прошу вибачення, формулу). Тому потрібно було розділити опис різних об'єктів. І тому використовуються схеми.
Що таке схема?
Якщо подивитися в таблицю "Секція 1 - шапка" , то другим параметром буде ім'я об'єкта. Воно жорстко прив'язане до параметрів, що використовуються. Усього у файлі all.spawn (перший патч) 190 різних об'єктів. Але це не все, що є в ігрових ресурсах. Усі знають, що з гри було викинуто транспорт, кілька монстрів та деякі аномалії. Тому знаючи, як описані схожі об'єкти, ми зможемо повернути відсутні деталі, а заодно і підредагуємо старі.
І все ж, повернемося до схеми. Схема (термін використовую я, і не факт, що він тут доречний) - це набір команд парсера, якими програма виводить вміст секція об'єкта. Якщо повернемося до таблиці "Секція 1 - шапка" , то побачимо, що в ній є пара назв, координати, роздільники. Щоб програма знала, як показати нам зміст цієї частини, вона використовує скрипти.
Використання схем
Все на прикладах так буде зрозуміліше.
Для відображення "Секція 1 - шапка" використовується така схема:
Команда | Опис |
---|---|
;секція 1 | перший рядок - коментар. Чи не обробляється, служить для позначок. |
read-2 | вивести 2 байти (розділювач) |
find-00-об'єкт | вивести кілька байт в ASCII до першого символу 00 , присвоїти ім'я об'єкт |
find-00-ім'я | аналогічно, але ім'я рядка – ім'я |
read-2 | вивести два байти (розділювач) |
hex-real-X | вивести 4 байти, перевести їх у формат дробових чисел |
hex-real-Y | присвоїти назви XYZ |
hex-real-Z | |
hex-real-Xrot | аналогічно, але назви Xrot Yrot Zrot |
hex-real-Yrot | |
hex-real-Zrot | |
read-8-розд | вивести 8 байт, назва розд |
read-4-?? | показати 4 байти, назв ?? (тобто невідомо) |
read-4-версія | ну і так далі... |
read-2-секція | ... |
read-2-розмір-dec | показати 2 байти, і додати в дужках десяткове значення |
next-table | перехід на вкладену секцію |
Я думаю, що сенс зрозумілий. Є 4 команди з параметрами і парсер їх виконує. До нього побайтого постпает зміст секцій і він просто кладе в потрібні місця (потрібні нам).
Команди у схемах
Формат всіх команд однаковий, роздільником виступає тире :
команда-значення[-назва[-опція]] команди: read, find, hex, next. значення: XX опції: dec, show
- read . Отримати та вивести XX байт. Опція dec додає десяткове значення отриманих даних
- find . Виводиться послідовність байт до першого символу XX. Потім послідовність конвертується в символи ASCII. Інакше кажучи, ми отримуємо всі текстові значення. Опція show виведе отриманий текст у додаткове вікно (зазвичай використовується для довгих скриптів)
- hex . Значенням виступає слово real , проте використане тільки для читання. Переводить 4 байти в дрібне число.
- next . Використовується лише для переходу до вкладеної секції в іншій таблиці.
Файли
У комплекті із програмою йдуть кілька файлів.
- data\object - 191 об'єкт, після символу "рівно" - схема, що використовується. Спочатку всі об'єкти мають схему "0", тобто "пустушку", яка просто показує кілька байт. Я дехто розібрав, але не факт, що правильно, так що дивіться.
- data\*.sch - а це самі схеми і є. Традиційні текстові файли. Які починаються з підкреслення – це схеми другої секції, із програми вони не редагуються, бо там все зрозуміло (майже).
Вже зайняті схеми: 1-Stalker; 2-restrictor, smart_terrain; 3-m_flesh; 4-actor; 5-breakable_object, всякі lamp; 6-m_trader. 7,8,9 – порожні, їх можна використовувати для подальшої роботи. Можна створити до 100 файлів, але я сподіваюся, що і десятка має вистачити. Не вистачить - копіюйте 0.sch під новим ім'ям та користуйтеся.
Приклад роботи
Після запуску програма перекине нас на об'єкт 93, stalker, схема 1. У ній багато описано, але ще й залишилися незрозумілі пункти. Але ми зараз будемо розбирати ворону... Ось тут є опис формату об'єкта "ворона";) Дивимося його:
число приклад байт 2 FC 00 4 00 00 00 00 4 01 00 00 00 4 D9 2D 03 00 1 BA 3 FF FF FF 100 4 FF FF FF FF 4 FF FF FF FF х monsters\crow\crow 100 6 00 00 00 00 00 00 4 80 3F 00 00 4 00 00 00 00 4 00 00 FF FF 4 00 00 00 00 4 00 00 00 00
Щоб побачити таке, потрібно лише додати схему для ворони. Для цього перейдемо на будь-який об'єкт "ворона" (наприклад, об'єкт 289). Його схема спочатку не задана, тобто "пустушка". Для створення нової схеми (зараз ми не намагатимемося адаптувати вже існуючі) у таблиці Секція 1 - шапка зробіть подвійне клацання на рядку об'єкт m_crow . Відкриється вікно прив'язки об'єктів до схем. Стрілки виберемо схему 7. Вона поки не зайнята. Після вибору закриємо вікно, воно більше не потрібне.
Тепер просто напишемо наступне у правій частині програми, у місці для команд парсера:
;m_crow
щоб самим потім згадати, навіщо ця схема. і далі ще кілька рядків (у дужках – мої коментарі, їх не потрібно писати):
;m_crow read-2 (три двобайтові значення - майже завжди так починається секція) read-2 read-2 read-4 (01000000 - завжди присутній) read-4 (залежно від рівня) read-4 read-1 (тут буде 00, зазвичай є скрипт, але зараз його немає) read-4 (а тут одні FF, мабуть опущені параметри) read-4 find-00
Тепер натиснемо Записати схему і побачимо вже більш осмислений результат. Трохи облагородимо вигляд, додамо назви (які знаємо):
;m_crow read-2-код1 read-2 read-2 read-4 read-4-код2 read-4 read-1 read-4 read-4 find-00-модель
Ну і так само продовжуємо пробувати. Зверніть увагу, що друга секція заповнилася автоматично, міняти її можна лише зовнішнім редактором у файлах _?.sch, але це нам не потрібно зараз.
Тепер всі ворони будуть потрапляти в вже напіврозібраному вигляді 😉 І можна спробувати подивитися, чи підійде ця схема наприклад до собак. Шукаємо собаку, міняємо їй схему на нашу m_crow і продовжуємо далі.
Втім, удачі в дослідженнях. І не забувайте ділитися знайденими схемами, які підходять одразу під кілька об'єктів, а не лише для ворон.