Сповіщення
Очистити все

SpawnEd


Ранг:
Майстер
Роль:
Гість
Записи:
752
Приєднався:
2 роки тому
 

Вступ

Поточна версія - 0.20

Головне вікно редактора

Отже, став зрозумілий формат all.spawn файлу. є ще багато неясного, але сподіваюся, що справа таки не застрягне на півдорозі.

Програма дозволяє переглядати ресурси спавн файлу в зручнішому вигляді, ніж просто в шістнадцятковому редакторі. Надалі програма легко перетвориться на редактор ресурсів, якщо виникне така потреба.

Головне її завдання на даний момент - допомогти детальніше розібрати формат спавн файлу для можливості вільного оперування його ресурсами до появи офіційних інструментів від розробника. Для цього в програмі існує невеликий скриптовий парсер, що налаштовується, що дозволяє самостійно виділяти цікаві місця у файлі для подальшого аналізу.

Опис роботи

Додаткові вікна редактора

Для початку роботи необхідно мати сам редактор, файл all.spawn будь-якої версії, і файли схем (про них детальніше). Співн має бути в одному каталозі із програмою. Стартуємо, і залежно від потужності комп'ютера отримуємо головне вікно за кілька десятків секунд.

Докладніше про формат all.spawn можна подивитися тут недалеко . Саме там я і сподіваюся побачити поповнення інформації. Починаємо розбиратись, де у нас що знаходиться. Описую зліва направо зверху донизу. Відразу обмовтеся, що майже всі зсуви в програмі вказані щодо початку секції, а не початку файлу.

  1. Ліва частина.
    • 4 основні секції all.spawn файлу. Ми з вами тільки починаємо розбирати другу, тож ще 2 попереду. Тому крім другої нам поки що нічого треба, та й при старті автоматично переходимо куди нам треба.
    • Запакована секція. Розміри, усунення, нічого цікавого.
    • Перераховано номери всіх ігрових об'єктів, вказано їх зміщення та розміри. Також є два поля для введення номерів об'єктів (швидкий перехід) і кнопка для поперемінного показу двох заздалегідь заданих об'єктів.
    • Заголовок вибраного об'єкта. Лише розміри. 4 тире – це вміст вкладених секцій, який видно на наступній частині.
  2. Центральна частина
    • (Зверху) Перша секція об'єкта. Завжди є. Містить ім'я об'єкта, його координати, версію гри та вкладену секцію
    • (Знизу) Друга секція об'єкта. Іноді є. Якщо є, містить копію даних з першої секції.
    • (праворуч) Зміст вкладеної секції, найзагадковішої на даний момент.
  3. Права частина.
    • Ось тут якраз і знаходиться парсер, що налаштовується. Ця частина є найпростішим текстовим редактором.
  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 і продовжуємо далі.

Втім, удачі в дослідженнях. І не забувайте ділитися знайденими схемами, які підходять одразу під кілька об'єктів, а не лише для ворон.


   
Цитата