Перевод Spyro 3: Взлом и программы
|
|
aleksusklim | Сообщение # 1 Воскресенье, 26.06.2011, 14:19 |
фдулыгылдшь
Редактор
«1066»
Где: Не в городе Драконов
|
Работа с текстовой частью перевода введётся на code.google.com/p/spyro3-rus, обсуждение перевода (а не взлома) В темеПеревод Spyro 3: Текст В этой теме происходит обсуждение перевода, а также создание софта для потрошения игры. Важные сообщения: Структура WAD-файлов Спец. символы и File Paint 1 | Извлечение и добавление текста | О звуке | В продолжение о звуке | Вариант перевода Buzz's Dungeon и Midday Gardens
Сообщение отредактировал aleksusklim - Среда, 29.04.2015, 19:51 |
|
| |
aleksusklim | Сообщение # 451 Среда, 14.08.2013, 19:10 |
фдулыгылдшь
Редактор
«1066»
Где: Не в городе Драконов
|
По совету Альтеи я опционально восстановил в новой версии вьювера отображение текстуры без двойной отрисовки, чтобы работало быстрее, как в первой версии. «Быстрое» и «правильное» умножение – теперь две части общего списка типов-режимов: (и кешируются по отдельности) «L,F,M,T» – стало что-то вроде «L,F,M,T1,T2», и переключает тот же Ctrl+Shift. Ещё и сравнивать цвета удобно. Минус – повторное открытие, считывание и обработка BMP-файла текстуры при каждом обращении к любой текстурированной модели (раньше запоминал текущую текстуру до перехода к другой модели или текстуры высокого разрешения). HD-текстуры вызываются тем же методом Hold Ctrl + Hold Shift, однако именно это нажатие отобразит двойную отрисовку, а вот Hold Shift + Hold Ctrl её снимает (для HD). Чтобы на удержание Shift камера тоже не двигалась (как при Ctrl), я добавил форс-стоп всех перемещений камеры и гравитации (до следующего касания мыши или любой стрелки) через двойное нажатие Ctrl подряд. Отображение чистой текстуры через Alt+Space по-прежнему работает, но для обоих режимов быстрого и двойного рисования отображается одинаково (и по скорости). На HD-текстуре в любом виде Alt+Space блокирован, зато по Shift+Ctrl теперь не вываливаешься на светотеневую модель. WASD сдублировал на стрелки. Также решил, чтобы в программе можно было «хоть кое-как» работать и без мыши. Для этого отдублировал «Num 0» и «Num /» как левую кнопку мыши, «Num .» и «Num *» как правую, а «Num -» и «Num +» – как среднюю. Колёсико сдублировано на PageUp и PageDown. Перемещение мышки – все «Num» цифры (ну направления понятны), кроме «Num 5». Из-за глюка Windows, что при удержании Shift вся Num-клавиатура перестаёт посылать нормальные состояния клавиш, а работает так словно NumLock отключён, я ещё и сам Shift сдублировал на ApplicationKey (контекстное меню), однако ради интуитивно удобного Ctrl+Shift+Num0 (выбор модели), я ещё раз сдублировал левую и правую кнопки мыши соответственно на Insert и Delete. Но всё равно из-за того же глюка (если пользоваться Shift, управляя через Num) некоторые кнопки могут «провиснуть» и обрабатываться как нажатые, хотя отпущены. Камера словно перестаёт слушаться и летает сама – для этого я и приберёг «Num 5» – его нажатие сбрасывает состояния абсолютно всех клавиш, и камера снова переходит в полное подчинение.
Всё сказанное выше никак не влияет на обычное использование программы – мышь по-прежнему в почёте и рекомендована к применению!
Зато теперь, хоть и с трудом, но программу стало возможно полноценно использовать и не имея мышку (хотя как же вы будете WAD на батники перетаскивать…)
Открылась проблема: при выводе диалога, чтобы получить цвет от пользователя (Hold Ctrl + Left и Hold Ctrl + Up – цвет сетки и цвет фона), главное окно программы теряет фокус, а модельное окошко Color Dialog его почему-то не получает… С мышкой всё просто – достаточно кликнуть. Но с одной клавиатурой ничего не реагирует ни на какие клавиши (Esc, Space, Tab), только на Alt+F4 (да, закрывает диалог). Чтобы суметь-таки выбрать цвет, нужно дважды нажать Alt+Tab – перейти в любое другое окно и вернуться обратно. Хотел что-то сделать, чтобы клавиатурный фокус был изначально (убрать полный экран, перенести поверх всех окон, сменить стиль окна через user32.dll и WinAPI – читал MSDN но ни чего не понял…), но окно упорно создаётся без фокуса. Помогло разве что полное скрытие основного окна программы – тогда остаётся лишь диалог, и фокус на нём, после Enter или Esc он пропадает, а главное окно появляется. Но… Я хотел, чтобы в главном окне было видно СТАРЫЙ цвет изменяемого параметра, чтобы глядя на него можно было установить новый. А полное исчезновение всего окна может дезориентировать пользователя (он подумает, что программа вылетела и закрылась, а диалог не заметит). Контроля над дефалтным (ну как сказать… вообще то он не совсем дефалтный, а из WindowsDialogs стандартного пакета расширения, но отличается лишь тем, что «определённые пользователем цвета» в палитре сохраняются между вызовами этого диалога в пределах одной сессии) диалогом выбора цвета у меня нет – после вызова Game Maker останавливается и не возвращается до его закрытия.
Итак, что мне делать? Три варианта: 1) Ничего. Написать в справке, что без мыши потребуется двойной Alt+Tab. 2) Скрывать главное окно до окончания выбора цвета. 3) Создать свою .dll или .exe, чтобы показывать свой диалог с исправленным фокусом.
…И нашёл ещё один полигон с неверным порядком вершин: http://klimaleksus2.ucoz.ru/Files/NEXT/next_39.jpg
Цитата (steeldragon) Я имел в виду, по смещению j1+j2.
А-а-й, дайте скрин WinHex, я не пойму про что вы говорите… Если это начало модели – то да, зануление делает части невидимыми, но это совсем неудивительно. А если то, что следует после модели – так я занулял, и это ничего не изменило…
Цитата (steeldragon) (Хотя я уже ничему не удивляюсь, после того, как неправильная S3M-модель испортила вообще все текстуры на уровне)
Это «взрыв», такое происходит часто. Например, если у цветов вершин четвёртый байт будет больше нуля. Появляются непонятные линии, которые пересекают экранную область и портят VRAM. Если посмотреть на него (в отладочном режиме Epsxe на софтовом плагине с нужной галочкой в настройках) нажатием цифры «0», то видно, что куски полигонов, линий или просто обрывки изображения копируются «как есть» не в левую половину VRAM, а во все его части.
Цитата (nihonjin) Пришлось постараться чтобы понять и заметить.
И что вы об этом думаете?
Цитата (nihonjin) Это может стать аргументом в пользу того, что так и надо переводить
Ну отлично!
Цитата (nihonjin) Мне не очень нравится когда в теме по одной части обсуждают особенности другой
А разве у вас на данный момент уже есть тема «Перевод Spyro and Sparx: Tondemo Tours?»
Цитата (nihonjin) сомневаюсь в необходимости "Перевод игр о Спайро – графика + общие вопросы".
Да кто ж виноват, что нас кинули абсолютно все художники, кроме одного.
Цитата (nihonjin) Ведь всем этим можно было заниматься и тут, а предназначение(подпись) - "Сборы художников, а также место для любых советов или идей" как-то идилична и могла бы быть воплощена в... остальных темах.
Только из-за этой формальности в скобках? То что она не исполнилась и не исполняется ещё не значит что исполнятся не будет.
Что уж, давайте тогда весь Гугль-проект грохнем – он всё равно никем не используется, тексты мы редактируем здесь, там никто ничего кроме нас самих же не комментирует, а голосования проводим вКонтакте.
Цитата (nihonjin) Да, я понимаю вашу логику "мол тут и там одна тема", но на мой взгляд это был двойной вред.
АМС не нужно было, блин, делить единственную тему в самый первый раз, когда об этом никто и не просил.
Цитата (nihonjin) Это вот как то, что вы описывали взломы(хоть и по звуку) в теме озвучивания.
Тему озвучивания вообще я создал, и предназначается она не только для одного озвучивания. Ну и работы по дублёжке, сбору актёров, обсуждение программ для записи/редактирования звука. Вспомните, что мы там делали за всё время? Агитировали, учили, спорили, соперничали, даже австралийский сериал чуть не перевели (до пони хоть доберёмся?). Или вы что, хотите, чтобы я десять тем сделал, по более узкоспециализированной тематике? Да сдохнут они все и сразу…
Штука такая, что тем у нас на порядок меньше, чем направлений работы, которая должна быть выполнена. А потом вы говорите, что происходит оффтоп, а писать всё надо было в других темах. Но на момент написания я не видел других более подходящих тем.
(хотел тут процитировать кое-что из темы Озвучивания, но пыхх.. не нашёл нужного комментария… Так что мысль останется незаконченной)
Цитата (nihonjin) I. Программу MegaTextRip из сообщения #399 можно настроить на экстракцию текста из Spyro2(в т.ч. jap)?
Ну по-идее её надо направить на эту игру, потом понять почему она не работает, потом взломать систему объектов в Spyro2 и что-то исправить. Ладно, потом попробую.
Цитата (nihonjin) II. Более важное. Когда вы расскажете о методике расширения субфайлов? Скажите хотя бы насколько это будет сложно.
Ну.. AWM повязан на структурированности, поэтому наворачивать его бесполезно. Я делал новый SWM – SmartWadManager на Delphi, и он будет работать в табличном режиме. Он сканирует заголовок (будут несколько возможных режимов) и виртуально разбивает весь файл на кусочки:
http://klimaleksus2.ucoz.ru/Files/S/SWM.png
Кусочек может принадлежать субфайлу целиком – это нормальный субфайл (отмечен зелёным кружком), может содержать в себе части нескольких субфайлов (пересекающиеся или вложенные) – это неправильный субфайл (отмечен красным), а может оказаться и бесхозным (голубой). Однако на протяжении всего кусочка принадлежности субфайлам постоянны, то есть если первый от 100 до 200, а второй от 150 до 300, то разбиение файла размером 500 будет как:
* От 0 длиной 16 – заголовок; * От 16 длиной 84 – пустота; * От 100 длиной 50 – только первый; * От 150 длиной 50 – первый и второй; * От 200 длиной 100 – только второй; * От 300 длиной 200 – пустота.
При выделении сведений о субфайле в левой части подсвечиваются справа жёлтым все кусочки, которые ему принадлежат.
Пустая область внизу окна – там будут основные кнопки типа экспорт/импорт, извлечение всего, добавление, и так далее (надо ещё подумать). Ну и новые функции, типа прямое изменение указателя/размера, перемещение субфайла, реорганизация (удаление пустого пространства), расширение файла и создание новых субфайлов. Для нашего случая нужно просто расширить WAD, выделить пустое место в конце и перенести в него нужный субфайл, после чего задать новый размер (скорее всего автоматически при импорте – будет опция вроде «увеличить размер субфайла за счёт следующего за ним неиспользуемого пространства»). Можно попробовать «раздвижением» всего содержимого, но чую что игра не выдержит. А вот перенос любого субфайла в конец я уже проверял, и это работает!
Также можно будет выгружать отдельно области (в том числе пустые, возможно сделаю проверку на «реальную пустоту» или функцию анализатора как в WinHex). …Но я уже очень давно не возвращался к дописыванию это проги.
but nobody came
Сообщение отредактировал aleksusklim - Среда, 14.08.2013, 19:28 |
|
| |
DrWho | Сообщение # 452 Среда, 14.08.2013, 21:29 |
Мудрый Дракон
Почетный Житель
«1371»
Где: Не в городе Драконов
|
Цитата (aleksusklim) Уж очень странную вы выбрали цитату для такой реплики. Нормальная цитата. Что вам в ней не понравилось?
|
|
| |
aleksusklim | Сообщение # 453 Среда, 14.08.2013, 23:34 |
фдулыгылдшь
Редактор
«1066»
Где: Не в городе Драконов
|
Цитата (aleksusklim) Итак, что мне делать? Три варианта:
Взял третий! Но не ради одного диалога.
Просто в режиме карты управлять мышью при помощи Numpad-клавиатуры было слишком долго. Понадобилась клавиша, временно ускоряющая влияние на мышку. А все приемлемые кнопки я уже истратил. Биндить на символьные клавиши нельзя (мешает одновременному нажатию), на тот же Shift нельзя из-за глюка, на «Num_Enter» я не могу (он приравнивается к обычному Enter и делает скриншот…), на сам «NumLock» тоже не выход. AppKey теперь занята дублем Shift, а на WinKey мне система не позволяет, параллельно открывая меню Пуска…
Давно я хотел хоть где-нибудь хоть для чего-нибудь использовать Scroll Lock! И хотя повода никогда не было, подходящий функционал я нашёл давно, но ещё не применял его. Через Win32 API можно спокойно определить, включён или нет сейчас ScrollLock (изменять его состояние сложнее, но получать элементарно). Вот я и написал маленькую DLL на SPHINX C-- , которая будет проверять состояние ScrollLock при попытке управления мышью (не столько мышью, сколько поворотом камеры) с клавиатуры. И теперь при включённом ScrollLock воздействие станет сильнее. Ещё сделал вариант очистки .tmp кеша при запуске – если ScrollLock включён, то программа предлагает очистить кеш (а заодно переключиться на LOD-версию первой модели без неба). Это вместо бывшего F12. Но F12 теперь будет просто закрывать программу с очисткой кеша (а заодно переключит на текстурированную версию первой модели с небом), и не моментально, а тоже с вопросом.
Ну и вот, чтобы моя DLL не была нужна из-за одной лишь функции, всунул туда ещё инициализацию да показ моего собственного диалога выбора цвета (тот же стандартный из WinAPI). Мне повезло сразу – не знаю почему, но глюк с потерянным фокусом исчез, и после открытия можно было без мышки выбрать любой цвет. А в дополнение я нашёл опцию открытия сразу полноценного диалога с радугой (которую обычно можно отобразить только нажатием «Определить цвет»). Хотел ещё в палитру «дополнительные цвета» сливать все когда-либо выбранные (а также получать и предлагать фоновый цвет самого неба; а вообще неплохо бы сделать экранную пипетку, чтобы подбирать цвета прямо из главного окна), но возится уже неохота. Единственный недостаток – диалог почему-то появляется не в центре экрана, а с левого верхнего угла. Но он такой большой, что не заметить его нельзя!
Цитата (nihonjin) Нелогично потому что в оригинале(яп) по-другому или сама фраза/перевод странная?
«Этот электрический удар записывает твоё состояние.»
Обычно выделяются существительные или глаголы, может словосочетания. А тут основа – и существительное (с определением) и глагол. Выделятся должно так, что если прочитать только выделенное, то читатель не должен впадать в ступор!
Тут логичней сделать: «Этот электрический удар записывает твоё состояние.» , разве нет?
Цитата (DrWho) Нормальная цитата. Что вам в ней не понравилось?
В цитате сказано: «Теперь буду исправлять кучу побочных багов, которые я успел наделать…» и относится это исключительно к моей программе просмотра моделей, а ваше сообщение гласит: «+ можно каких-нибудь бонусов добавить в игру…»
И вопрос: причём здесь вообще какие-то бонусы!?
but nobody came
|
|
| |
DrWho | Сообщение # 454 Четверг, 15.08.2013, 00:09 |
Мудрый Дракон
Почетный Житель
«1371»
Где: Не в городе Драконов
|
Цитата (aleksusklim) В цитате сказано: «Теперь буду исправлять кучу побочных багов, которые я успел наделать…» и относится это исключительно к моей программе просмотра моделей, а ваше сообщение гласит: «+ можно каких-нибудь бонусов добавить в игру…» Просмотра моделей.. так вот зачем эта программа написана? То-то я это никак понять не мог, ибо для чего программе подсовывать WAD файл.. Отсюда и цитата не та пошла. Тут просто одна лишь программиская писанина, отсюда и разобрать не все легко.
Сообщение отредактировал DrWho - Четверг, 15.08.2013, 00:10 |
|
| |
steeldragon | Сообщение # 455 Четверг, 15.08.2013, 20:11 |
Старейшина Драконов
Редактор
«422»
Где: Не в городе Драконов
|
Цитата (aleksusklim) А-а-й, дайте скрин WinHex, я не пойму про что вы говорите… Если это начало модели – то да, зануление делает части невидимыми, но это совсем неудивительно. А если то, что следует после модели – так я занулял, и это ничего не изменило… Да, то что следует после модели. Посмотрел, действительно, в Spyro 3 после их зануления ничего ни меняется (разве что эмулятор вылетает). Ошибся я, с кем не бывает... наверное, тогда я и в самом деле занулял части модели...
Цитата (DrWho) Просмотра моделей.. так вот зачем эта программа написана? То-то я это никак понять не мог, ибо для чего программе подсовывать WAD файл.. ...за некоторое время до этого... Цитата (aleksusklim) последнее что я сделал – программу 3D просмотрщик моделей. ... Видимо, в моей "подозрительной" области хранятся не вершины (ну или не совсем вершины): https://dl.dropboxusercontent.com/u....nd1.jpg Кусочек поверхности под водой после изменения данных ведёт себя так же, как и земля без воды. Локализовал до 8-ми байт (смещение в японской версии Spyro2 - 11123842, прямо в .bin - образе диска): Код Mod. FF 0C FF 0C FF 0C FF 0C Orig. E6 0C A7 0C A6 0C A5 0C
|
|
| |
aleksusklim | Сообщение # 456 Пятница, 16.08.2013, 02:02 |
фдулыгылдшь
Редактор
«1066»
Где: Не в городе Драконов
|
Так-с, кажется, готово!
Вот новая версия, и её снова необходимо проверить (желательно тщательно) :
На этом пора заканчивать. И поменять аватарку обратно, скину-ка сюда их копии на память:
Цитата (DrWho) Просмотра моделей.. так вот зачем эта программа написана?
And what in tarnation does that mean?
Ну в смысле… А вы что, так до сих пор и не опробовали мою чудную программу? Но почему же?
Цитата (steeldragon) Ошибся я, с кем не бывает...
Да там не мудрено заблудится в этих jump-ах, мне столько раз приходилось возвращаться в начало и прыгать снова, чтобы понять, где же я нахожусь…
Цитата (steeldragon) ...за некоторое время до этого...
Он же сказал, программистская Х и та.
Цитата (steeldragon) Кусочек поверхности под водой после изменения данных ведёт себя так же, как и земля без воды.
А может.. вы просто удалили саму воду? Осталась только нормальная земля под ней.
Цитата (steeldragon) (ну или не совсем вершины)
Я вот не знаю, вид такой, будто там просто флаги типов поверхностей. Но с другой стороны, физика НИКАК не связана с графикой, но при этом на 100% дублирует её где надо. Там должны быть вершины…
Цитата (steeldragon) (смещение в японской версии Spyro2 - 11123842, прямо в .bin - образе диска):
Воу, я надеюсь вы не в образе проводили эксперименты? Надо прямо в Epsxe.
Открываете нужный субфайл в WinHex. Запускаете Epsxe в окне на софтовом плагине (окошко можете сделать «поверх всех окон» если у вас есть сторонние средства для этого, я использую AnVir TaskManager). Open RAM в WinHex, берите только память самого EXE без всяких там DLL (и не Primary memory!). Выделяете кусок данных субфайла, копируете «Copy Hex Values». Переходите в память Epsxe и делаете «Find Hex Values» на эти данные. Если смещение не выровнено между окнами, придётся добавить несколько нулей в начало вашего субфайла. А потом команда «synchronize & compare», да радуетесь! Редактируйте прямо память эмулятора, «применить» – колёсико мышки туда-сюда. Изменения вступают в силу моментально, что можно увидеть в окне Epsxe. Делайте сохранения F1 перед изменением, чтобы всегда можно было загрузиться обратно. (Правда окно «поверх всех» часто захватывает мышку при щелчке по панели задач, что меня постоянно раздражает…)Добавлено (16.08.2013, 02:02) --------------------------------------------- ...А в пачке небосводов Spyro2 были те небеса, которые в уровнях, а не те, что на порталах...
Значит портальное небо остаётся неразгаданным.
И чёрт, забыл написать в инструкции к SpyroWorld как правильно визуализировать модели в 3DsMax.
but nobody came
|
|
| |
DrWho | Сообщение # 457 Пятница, 16.08.2013, 11:58 |
Мудрый Дракон
Почетный Житель
«1371»
Где: Не в городе Драконов
|
Цитата (aleksusklim) А вы что, так до сих пор и не опробовали мою чудную программу? Нет еще.
Цитата (aleksusklim) Но почему же? Я просто в этого Спайро уже прилично наигрался, еще не хватало мне через программу все уровни смотреть.
Цитата (steeldragon) ...за некоторое время до этого... Я ж говорю, я некоторые вещи мог не заметить, ибо тут много писанины программиской было.
К слову: не хочу никого отвлекать, но я тут на одну проблему заметил: когда я запускаю игру (с переводом от вектора и нормальными шрифтами в атласе), у меня почему-то вдруг небольшой треск на 3 секунды издается (это когда еще вор будет со Спайро), это исправимо?
Сообщение отредактировал DrWho - Пятница, 16.08.2013, 11:58 |
|
| |
steeldragon | Сообщение # 458 Пятница, 16.08.2013, 14:06 |
Старейшина Драконов
Редактор
«422»
Где: Не в городе Драконов
|
Цитата (aleksusklim) А может.. вы просто удалили саму воду? Осталась только нормальная земля под ней. Не знаю. У меня вообще такое ощущение, что любое изменение тех данных приводит к одному и тому же результату.
Цитата (aleksusklim) Открываете нужный субфайл в WinHex. ... ... Спасибо за совет...
Цитата (aleksusklim) Значит портальное небо остаётся неразгаданным. Э нет, так дело не пойдёт. Я тут как раз смотрел данные сразу после данных небес (S3 - gh), забил их кусок мусором, и вот что получилось: https://dl.dropboxusercontent.com/u....%29.jpg Так что портальное небо, похоже, идет сразу после обыкновенного. Плюс еще там в начале есть что-то, подозрительно похожее на следующий jump. ... Записал образ с демо Spyro 2, работает вроде. Скачать: https://dl.dropboxusercontent.com/u....Demo.7z (6 МБ)
Сообщение отредактировал steeldragon - Пятница, 16.08.2013, 16:44 |
|
| |
aleksusklim | Сообщение # 459 Воскресенье, 18.08.2013, 01:46 |
фдулыгылдшь
Редактор
«1066»
Где: Не в городе Драконов
|
Ух, а вы правы! Только там вообще не «небо», а некая другая специфика. Оно не круглое, это не полусфера. Если походить возле портала, то станет ясно, что портальное небо – просто прямоугольник. С какой бы стороны к нему не подойти – это один и тот же прямоугольник. Все портальные небеса сложены вместе и описываются вместе. Так я мог быстренько повесить небо Cloud Spires на портал для Sunny Villa. А мог и сделать так, чтобы Sunny Villa вёл в Cloud Spires.
Или в любой другой уровень…
…А может и не уровень: http://klimaleksus2.ucoz.ru/Files/NEXT/next_40.jpg
Я.. не знаю. Я просто… Я пришёл к Колдунье. На то самое место, где она придумывала свои злобные планы. Там безлюдно… Кажется я опоздал, все уже ушли. Пустая комната. Нет ни трона, на котором она любила посиживать, ни верных слуг, ни клетки для поимки очередной жертвы. Ни входа, ни выхода…
Да, сейчас я наконец начинаю ощущать то, что почувствовал Yams при виде моего Вихря.
Потрясающе.
Только Спаркс немного испугался, побледнел: http://klimaleksus2.ucoz.ru/Files/NEXT/next_41.jpg Мерцает, почернел: http://klimaleksus2.ucoz.ru/Files/NEXT/next_42.jpg
(А было бы неплохо послать Спайро сюда каким-нибудь порталом из Супер-Бонуса)
Но что меня реально удивляет, так это то, что все стены, пол, и даже портреты Колдуньи полностью материальны: http://klimaleksus2.ucoz.ru/Files/NEXT/next_43.jpg
…Я достиг Дао, ухожу в Нирвану… Добавлено (18.08.2013, 01:46) --------------------------------------------- http://klimaleksus2.ucoz.ru/Files/NEXT/next_44.jpg
Всё до чёртиков материально. Верхушки деревьев, двери, купола…
А в сценках, которые основаны на частях уровней, оказывается, присутствуют почти все живые объекты:
http://klimaleksus2.ucoz.ru/Files/NEXT/next_45.jpg
Но они мертвы:
http://klimaleksus2.ucoz.ru/Files/NEXT/next_46.jpg
Не движутся и нематериальны:
http://klimaleksus2.ucoz.ru/Files/NEXT/next_47.jpg
Лава – убьёт! Не дракона так эмулятор. Как и любая другая жидкость:
http://klimaleksus2.ucoz.ru/Files/NEXT/next_48.jpg
Изучить бы расположение псевдо-объектов повнимательнее:
http://klimaleksus2.ucoz.ru/Files/NEXT/next_49.jpg
Даже этот стоит:
http://klimaleksus2.ucoz.ru/Files/NEXT/next_50.jpg
А тут сразу трое: яичко, мишка да воришка:
http://klimaleksus2.ucoz.ru/Files/NEXT/next_51.jpg
Не на любой индекс можно попасть (10 – Sunrise Spring, 11 – Sunny Villa … ; 19 – нет, 20 – Midday Gardens … 29 – нет … … 50 или 51 – Super Bonus; сценки начинаются от 60 или 80…)
Бывало и такое:
http://klimaleksus2.ucoz.ru/Files/NEXT/next_52.jpg http://klimaleksus2.ucoz.ru/Files/NEXT/next_53.jpg
Но куда чаще так:
http://klimaleksus2.ucoz.ru/Files/NEXT/next_54.jpg http://klimaleksus2.ucoz.ru/Files/NEXT/next_55.jpg
Портальное небо изучено, осталось доломать до конца: http://klimaleksus2.ucoz.ru/Files/NEXT/next_56.jpg Там сначала перечисляются все вершины, потом все цвета, а за ними сразу все полигоны.
Немного поизучал суб-субфайлы, нашёл где наши все 3D модели хранятся – третий суб-субфайл. Но! В подуровнях они занимают первую половину нечётного субфайла. Того же где модель земли, просто вместо текстурных индексов. А помните странные данные в шапке субфайла-уровня? Это как раз ссылки на какие-то части третьего суб-субфайла. А для подуровней они ровно перед моделью земли, и указывают на первую половину текущего (нечётного).
Насчёт объектов тоже поработал. Они накрепко привязываются к третьему суб-субфайлу (в подуровнях – к первой половине нечётного), и «тип» объекта как-то определён там. И он недействителен в других уровнях или подуровнях. Таким образом, каждый подуровень делит со своим родительским уровнем ТОЛЬКО текстурные индексы (ну и почти всю видео-память), а все 3D персонажи скопированы ещё раз.
…А спорим, что мне сейчас завидует каждый скейтбордист?
http://klimaleksus2.ucoz.ru/Files/NEXT/next_57.jpg
«Вот как я провёл это лето», так сказать:
http://klimaleksus2.ucoz.ru/Files/NEXT/next_58.jpg http://klimaleksus2.ucoz.ru/Files/NEXT/next_59.jpg http://klimaleksus2.ucoz.ru/Files/NEXT/next_60.jpg http://klimaleksus2.ucoz.ru/Files/NEXT/next_61.jpg http://klimaleksus2.ucoz.ru/Files/NEXT/next_62.jpg http://klimaleksus2.ucoz.ru/Files/NEXT/next_63.jpg http://klimaleksus2.ucoz.ru/Files/NEXT/next_64.jpg http://klimaleksus2.ucoz.ru/Files/NEXT/next_65.jpg
…А если никому не интересно, то буду один там кататься))
but nobody came
|
|
| |
steeldragon | Сообщение # 460 Воскресенье, 18.08.2013, 15:04 |
Старейшина Драконов
Редактор
«422»
Где: Не в городе Драконов
|
Цитата (aleksusklim) Всё до чёртиков материально. Верхушки деревьев, двери, купола… И те подозрительные данные там тоже присутствуют...
Цитата (aleksusklim) Там сначала перечисляются все вершины, потом все цвета, а за ними сразу все полигоны. Данные после основного неба вроде как разбиваются jump-ами на четыре области.
Вот эта область к небу порталов, я так понимаю, не относится? По виду на указатели на что-то похоже.
Цитата (aleksusklim) А помните странные данные в шапке субфайла-уровня? Это как раз ссылки на какие-то части третьего суб-субфайла. Очень интересно. Получается, мы можем поменять 3д-модель персонажа на (почти) любую другую, но только в пределах уровня/подуровня? А на нормальных "живых" объектах работает?
Цитата (aleksusklim) Не на любой индекс можно попасть (10 – Sunrise Spring, 11 – Sunny Villa … ; 19 – нет, 20 – Midday Gardens … 29 – нет … … 50 или 51 – Super Bonus; сценки начинаются от 60 или 80…) А что такое (а самое главное - где) эти индексы вы нам объясните?
EDIT: Протестировал новую версию SWV. На WAD от Spyro3 v1.0 работает превосходно. Теперь все уровни выглядят просто великолепно (особенно для игры более чем десятилетней давности!). Только есть одно небольшое "но": https://dl.dropboxusercontent.com/u....T.1.jpg И так во всех вариантах замка. EDIT2: При изменении "подозрительных" данных просматривается какая-то цикличность. То есть, забиваешь энную область мусором - слетает всё. Возвращаешься к исходным и дальше меняешь - снова куски поверхности с начала уровня убираются. Также, похоже, баги с "воздухоплаванием" (Даже где-то было описано, как воду превратить в обычную поверхность. Это довольно длинная комбинация действий, потом проверю.) происходят именно из-за ошибок в этой области.
Сообщение отредактировал steeldragon - Понедельник, 19.08.2013, 21:08 |
|
| |
aleksusklim | Сообщение # 461 Вторник, 20.08.2013, 01:03 |
фдулыгылдшь
Редактор
«1066»
Где: Не в городе Драконов
|
Цитата (steeldragon) И те подозрительные данные там тоже присутствуют...
Ну как вы могли понять из последних скринов, мне удалось скопировать физику мира. Сначала я хотел скопировать скейт, но беда в том, что все скейтпарки располагаются в подуровнях, а мой замок – как «уровень». А чтобы вытащить объекты, мне нужно копирнуть в третий суб-субфайл половину, и направить на неё указатели из заголовка, но сколько я не бился над этим – либо не заходит в уровень, либо не живёт в нём дольше пары шагов. Тогда я решил выкопировать всю модель земли заместо нормальной модели, благо известно как: удалить старую, вставить новую и прописать её размер как соответствующий jump. Но не вышло (хотя я пробовал только один раз), видимо где-то ещё есть указатели на что-то за моделью, и при раздвижении файла они стали указывать не туда. Тогда проверенный метод – тупо записать свою модель поверх существующей, ничего не раздвигая. Но это возможно только если новая модель по размеру не превосходит имеющуюся, в связи с этим я и воспользовался вторым большим скейтпарком (что видно по красному шару на скрине), а не первым. Без особых проблем я нашёл и заменил и физику игры. Она следовала сразу после графической модели (не вот прям сразу, но большой объём данных ДО неба). Всё почти что хорошо.
Чуть больше меня удивило то, что я не смог найти физику в самом уровне Enchanted Towers! Там за моделью идёт сразу небо. И я пробовал заменить полностью второй суб-субфайл уровня вторым же из сценки с замком – модель поменялась, а физика нет. Значит физика тоже в третьем суб-суфайле, но надо бы для других уровней попроверять… Я уже на глаз могу различать видимую модель, индексы текстуры, стандартное небо, графические данные, программный код и теперь и физику мира.
Вот что я знаю сейчас:
http://klimaleksus2.ucoz.ru/Files/NEXT/jump_01.png
Ну вверху ясно что – суб-субфайлы: смещения и размеры.
Примерно так (грубо) : Первый – текстуры и звуки; Второй – модель земли (плюс индексы текстур и небо); Третий – типы живых объекты; Четвёртый – перечисление экземпляров объектов; Пятый – типы живых объектов и модель для первого подуровня; Шестой – перечисление экземпляров объектов для первого подуровня; Седьмой и восьмой – как пятый и шестой для второго подуровня (до трёх подуровней максимум).
А что на скрине выделено? Ну знаете да – яйца. Модели, текстуры и анимация вылупляющихся дракончиков. Их шесть по количеству яиц, внутреннюю структуру ещё никогда не исследовал, но их можно спокойно заменять принудительно или редактировать указатели.
Интереснее то, что идёт ниже них. Много, много указателей. Размеров нет, только сами указатели. Адресация – относительно всего этого субфайла, то есть обращаться к ним надо напрямую, ничего не прибавляя. Сейчас попрыгаем…
А вот то что ниже – я не знаю что такое! На указатели не похоже, слабое изменение не даёт видимых эффектов, а сильное просто выбивает из уровня (менять надо прожигая образ, в памяти эмулятора будет игнорироваться – значит используется только на загрузке уровня).
Ладно, берём первый из указателей (тех что под выделенным) и прыгаем:
http://klimaleksus2.ucoz.ru/Files/NEXT/jump_02.png
Выделено место приземления, и если всмотреться, то заметно, что сверху и снизу разные данные – вверху много повторений (как у текстур или физики мира), а внизу полный бардак. На самом деле это часть третьего субфайла. Прыгнем в его начало:
http://klimaleksus2.ucoz.ru/Files/NEXT/jump_03.png
Видно два потенциальных прыжка – первый сразу же, и с четвёртого байта за ним. Прыгнем по первому (относительно текущей позиции) :
http://klimaleksus2.ucoz.ru/Files/NEXT/jump_04.png
Ставим метку, возвращаемся и прыгаем по второму варианту снова относительно «текущей» позиции, НЕ начала субфайла (будет начало + 4) :
http://klimaleksus2.ucoz.ru/Files/NEXT/jump_05.png
Во-от, то что ниже очень похоже на «физику мира». Ясно, что по «+4» мы упрёмся в «FE-FF=FF-FF», а это тупик. Зато дальше (по +8) идёт очередной прыжок – встанем на него и воспользуемся (от «текущей») :
http://klimaleksus2.ucoz.ru/Files/NEXT/jump_02.png
(Да, это копия скриншота, нет смысла делать другой) Снова те данные, которые мы получили по первому указателю из шапки. Игнорируем 4 байта, и рассматриваем следующие четыре как новый прыжок (от текущего) :
http://klimaleksus2.ucoz.ru/Files/NEXT/jump_06.png
Курсор показывает, куда я приземлился, а выделено то, что хочу использовать. В общем, на смещении +8 виден новый прыжок. По нему:
http://klimaleksus2.ucoz.ru/Files/NEXT/jump_07.png
Принцип снова тот же: на +8 очередной прыжок. Если прыгнуть, то там на +8 снова будет прыжок, и так много раз (вот например озёра «7C», про которые я говорил: http://klimaleksus2.ucoz.ru/Files/NEXT/jump_08.png ), до тех пор, пока:
http://klimaleksus2.ucoz.ru/Files/NEXT/jump_09.png
Всё, конец, допрыгались. Это были какие-то структуры, их бы неплохо по файлам нарезать, а потом между разными уровнями одинаковые поискать…
Теперь попробуем взять второй указатель из шапки:
http://klimaleksus2.ucoz.ru/Files/NEXT/jump_10.png
Хо-па! Мы прямо сюда и попали (на выделенный «не прыжок»). То есть первый указатель в шапке был каким-то сборником. И состоял из нескольких блоков, по которым надо прыгать. Но второй указатель на него уже не похож, а прыгать некуда. Вот что по третьему:
http://klimaleksus2.ucoz.ru/Files/NEXT/jump_11.png
Прыгать опять некуда, соседние смещения ничего полезного не дают. И вроде бы, все остальные указатели из шапки ведут себя абсолютно также – приводят к нескольким FF в ряд, а потом всё.
Вот ткнём в предпоследний:
http://klimaleksus2.ucoz.ru/Files/NEXT/jump_12.png
Говорю же, очень похожий заголовок. Вроде бы я подобный на скейтпарке коцанул и выбил несколько кадров из анимации той синей штуки, из которой можно скейтборд достать. Она же анимированная (то ли вращается, то ли просто цвета меняет). Так вот, после моего вмешательства она стала в каждом цикле пропадать на несколько кадров. А когда я уломал её так, что она совсем пропала, то издали вместо неё появлялись беспорядочные голубые полигоны.
Ладно, вот куда ведёт последний указатель из шапки:
http://klimaleksus2.ucoz.ru/Files/NEXT/jump_04.png
И да, это снова копия прошлого скрина с зелёной меткой – на конец. Конец всего третьего суб-субфайла.
Правда это не совсем конец, ведь вот с чего начинается четвёртый:
http://klimaleksus2.ucoz.ru/Files/NEXT/jump_13.png
А вот что за мусор перед ним я так и не понял, но это точно не то, что я искал…
Теперь прыгнем в пятый суб-субфайл:
http://klimaleksus2.ucoz.ru/Files/NEXT/jump_14.png
Я утверждаю, что его начало (первая половина) – это тоже своего рода «третий суб-субфайл». Но сначала первый же прыжок (от «текущего», как и все предыдущие) :
http://klimaleksus2.ucoz.ru/Files/NEXT/jump_15.png
Во, самый класс! Попали в четыре нуля, но это разделение: всё что выше – как бы «третий суб-субфайл», всё что в самом низу (с «рК») – узнали? – это 3D модель. Подуровня, естественно, а далее вниз будет весь типа «второй суб-субфайл».
А вот что же в середине? Одинокими строчками над моделью – та же дребедень, которая в шапке всего уровня находится (возможно, немного отличается); а сразу после курсора – те самые указатели из шапки, но уже для подуровня! И адресация, ух, относительно текущего (пятого) суб-субфайла. Поэтому прыгать жутко неудобно, надо сначала весь пятый отдельно выгрузить, или копировать смещение прыжка и ставать в начало субфайла (по mark position).
Вот что получаем по первому: http://klimaleksus2.ucoz.ru/Files/NEXT/jump_16.png
Вполне возможно, что отсчитывать надо и не начала всего суб-субфайла, а с его логической части (как третьего), то есть +4, тогда бы мы ещё и на «01-00=00-00» точно попали. И на самом деле это был не первый указатель, а второй. Первый – это и есть «00-00=00-00», на котором мы стояли. По этому нулю попадаем просто на +4, а там как и для первого указателя основного уровня – ещё +4 и будет прыжок. По прибытию – ещё +8 и новый прыжок. Ну всё ясно же?
А вот что будет, если я прыгнуть через 3D модель: http://klimaleksus2.ucoz.ru/Files/NEXT/jump_17.png
Ну что за мусор, кто мне объяснит… И это не физика мира, потому что она дальше:
http://klimaleksus2.ucoz.ru/Files/NEXT/jump_18.png
И это доказано. Если сделать ещё три прыжка (ну первые два слабоваты), то вылетаем в конец:
http://klimaleksus2.ucoz.ru/Files/NEXT/jump_19.png
То что сверху и похоже на графические текстуры, кажется, окончание физики. Ещё ниже – опять бредятина:
http://klimaleksus2.ucoz.ru/Files/NEXT/jump_20.png
…Правда она весьма структурированная, и в каждой структуре либо 64, либо 16 байт.
Цитата (steeldragon) Данные после основного неба вроде как разбиваются jump-ами на четыре области.
Так странно, когда они то большие (под «+20 000»), то изничтоженные до «+4»…
Цитата (steeldragon) Вот эта область к небу порталов, я так понимаю, не относится?
Не знаю, где вы это откопали, но всё что я могу сказать – немного похоже на физику мира…
Цитата (steeldragon) Очень интересно. Получается, мы можем поменять 3д-модель персонажа на (почти) любую другую, но только в пределах уровня/подуровня?
А вот нет. Как-то превратил Хантера в скейтборд, но при разговоре вылетал эмулятор; однажды превратил все алмазики в эти синие штуки, из которых можно достать скейт (они тогда даже кружились как бриллианты), но вылетало как только Спаркс пытался их подобрать. Это получалось, когда я менял два указателя из шапки местами. Но обычно (если изменять содержимое по указателям или пытаться скрестить объекты из разных уровней) игра просто вылетает – то со стандартным «opcode» (недействительный код операции ассемблера), то «dma 4 not supported», то зависал, то просто выключался без сообщений, а иногда было и стандартное исключение в стиле «Майкрософт просит извинения за неудобства…». Графических «взрывов» и слезающих текстур никогда не было, видимо данная часть не работает с графикой напрямую. Мне кажется, там не только 3D анимированные модели живых объектов, но и их полный «дефинишн», то есть действия. Должен быть и код! Но кода там явно нет… А где же он? В EXE? Но тогда бы все объекты игры были стандартизированы. А судя по четвёртому суб-субфайлу – идентификатор одних и тех же объектов может менять от уровня к уровню. Ну алмазики всегда «1» вроде бы. Смена идентификатора любого объекта на «1» заставляет Спаркса подобрать его (результат непредсказуем!); сам Спаркс – тоже объект, в ресурсах отсутствует, но в памяти его видно (дописывается в конец), можно даже сделать себе несколько стрекоз, но только одна из них будет «главной», иметь свечение и реагировать на нажатие паузы. Объекта «Спайро» нет НИГДЕ. Короче, даже имея на руках сколько-то объектов в третьем суб-субфайле, их нельзя ВСЕ увидеть в игре «просто так». По трём причинам: 1) Не все 88 байт, описывающих экземпляр объекта, играют одну и ту же роль для разных вещей – да, координаты, масштаб и поворот у всех, но всё остальное весьма различается. 2) Каждый экземпляр выделяет себе память (хотя бы 4 байта) и хранит там свои личные данные. Они могут быть любой длинны и структуры, например Вихрь имеет высоту, ширину и флаг камеры, яйца – номер вылупляющегося дракончика, а «говорящие» персонажи – весь свой текст! А текст, как мы знаем, повязан на указателях. И даже если мы создадим новый пустой экземпляр говорящего объекта, но не поставим его личный указатель на правильно отформатированную и размеченную память (а для всех типов объектов она разная), то в лучшем случае объект просто не будет функционировать, но скорее всего он даже останется невидимый, а может быть и эмулятор тотчас же вылетит. 3) Долбанные номера типов объектов раздаются как-то рандомно от 1 до 65535. И (навскидку) менее 255 из них используются, то есть все остальные цифры приведённого диапазона НЕ являются нормальными объектами, и при установке обычно сразу же вешают эмулятор. Поэтому есть взять любой объект и тупо пытаться угадать новый номер типа для него, то с высокой вероятностью мы попадём в неиспользуемое число, и игра упадёт (а это сильно замедляем процесс перебора). Если же игре не упала, то вероятность того, что объект будет видимый крайне мала, ибо мы не знаем что это за объект, и уж тем более, какие переменные ему требуются. А если игра всё-таки упала, то есть также вероятность того, что этот тип существовал, но его личный указатель был направлен на неправильно оформленную память (элементарно – там мог быть прыжок на текст, а исходный объект сохранил туда какой-нить флаг использования, и естественно прыжок на ячейку, не кончающуюся на «80» (старший байт) – гарантированный access violation).
Зато если мы сможем хотя бы видеть анимированные 3D модели, мы будем соображать примерно, что же нужно объекту. А вдруг в DinoMines есть этот пропавший динозавр на арене? Данных там много, но вызвать и посмотреть так просто не получается. А если вспомнить видео (в этой теме, очень давно) на Scorch’s Pit, то ясно же, что в игре осталась куча неудалённого мусора, и в первую очередь это 3D модели. Они забыты, у них утеряны индексы, но они есть!
Ещё бы помогло какое-то определение, как индексы типов сопоставляются с самими типами. Таблица распиновки…
Цитата (steeldragon) А на нормальных "живых" объектах работает?
Хочу попробовать сделать из подуровня цельный уровень, то есть переадресовать всё из шапки. Но что со второй половиной данных делать…
Цитата (steeldragon) А что такое (а самое главное - где) эти индексы вы нам объясните?
Да, наверно пока нет. О, слушьте, помогите решить одну головоломку, уже несколько дней над ней бьюсь: Вот у нас есть наша 3D модель любого уровня. У неё ж вначале указатели на кусочки, верно? И эти кусочки равноправны между собой, так? И если мы поменяем местами два куска, то ничего не должно измениться, согласны?
Так вот, я упёрся в беду: если настойчиво перемешать все указатели между собой, то возникнут глюки. Попробуйте! Можно прямо в памяти (тогда это будет абсолютные адреса). Почиркайте их (можно сразу блоками переставлять). Потом походите по уровню и посмотрите, нет ли чего необычного. Если нет, то попереставляйте тщательней, и посмотрите ещё раз.
Вот глюки: 1) Вода и подводный мир – возможны неправильные цвета (но мне неважно). 2) Взрывы – все модели могут облысеть, а текстуры сорваться (но мне снова неважно, в моём случае такого нет) 3) Некоторые части модели могут исчезать в зависимости от угла и направления камеры. Вот это и самое главное. Словно кто-то отслеживает с какой стороны надо смотреть на определённый кусок модели, но запоминается не внутри куска, а лишь по его номеру. Поэтому переставление двух кусков меняет их «углы видимости», и они начинают ни с того ни с сего пропадать…
Пробовал удвоить кол-во кусков, продублировать их, а первую половину занулить. Итог – вся модель становится невидимой одновременно под определённым углом зрения и координатами камеры. Надо это исправить…
О, и кстати: там у меня в документации оказывается ошибка – от всех указателей на куски надо отнять 8 – а в заголовках будет на 8 байт больше. Эти восемь байт отвечают за видимость куска и угол обзора (но блин, это не то, иначе бы от последовательности не зависело), а также есть флаг «плоской воды» и деления на 4 вместо умножения на 2. Но это не так важно… Хочу нереально классное видео снять, как я по куполам замка на скейте рассекаю, но это дурацкое моргание модели весь смак отобьёт Цитата (steeldragon) Протестировал новую версию SWV. На WAD от Spyro3 v1.0 работает превосходно.
Ну не совсем уж и идеально – просветка перекрывающихся полигонов, ближняя отсечка, да воду сквозь воду не видать. Надо бы попробовать рисовать тексутрированную модель поверх LOD модели, ведь та обычно содержит далёкие фоны уровня…
Цитата (steeldragon) На WAD от Spyro3 v1.0
Какая версия?
Цитата (steeldragon) Только есть одно небольшое "но":
В смысле что у модели отломан край, или что вода чёрная?
Оба – не моя вина. Край отломан везде, но по-разному, а вода – да, это не вода, а земля (и скейт по ней едет как по земле). И цвет там на светотеневой модели абсолютно чёрный – а как я сказал, вода бы стала полностью прозрачной. Прозрачность текстуры отсутствует.
Другое дело Spyro2! Найдите там этот замок – там вода будет как нормальная вода. (Надо бы на нём тоже попробовать покататься…)
Цитата (steeldragon) Теперь все уровни выглядят просто великолепно (особенно для игры более чем десятилетней давности!).
А я тем временем ломанул координаты объектов:
http://klimaleksus2.ucoz.ru/Files/NEXT/next_66.jpg
Кто-кто там метки заказывал?
Это сразу все объекты – не только видимые, но и вспомогательные, и детекторные, и звуковые (на деревьях видите? Эти птицы! Которые поют. А на воде – это «звук воды»…)
Цвета – псевдоцветные. HSV, оттенок – примерный коэффициент между 0 и 255, условно показывает тип. Если тип только один – будет красный; если два – красный и голубой, если три – красный, зелёный и синий (по цветовому кругу-радуге). В разных уровнях одинаковые цвета обозначают разные объекты, я вообще тип никак не проверял, просто сравнивал на одинаковый/другой, чтобы посчитать общее количество типов и выбрать цвет исходя из него. Единственное, чему удовлетворяют цвета – от красного по радуге вверх (до хм… красного) – индексы по возрастанию.
Итак, сейчас объясню, как достать координаты и объекты. Берём четвёртый суб-субфайл (или 6,8,10 для подуровней). Прыгаем на 48 вперёд. Теперь будем считывать 4 байта и делать прыжок вперёд (поскольку четыре уже считаны, надо вычесть 4). Таких прыжков надо совершить ровно 12 штук! После этого вы окажитесь в области описания экземпляров. Заголовок: 4 байта – размер всех, 4 байта – количество изначально имеющихся объектов (в памяти они дописываются, но это число более не меняется). Далее – столько-то структур по 88 байт, считываем так: 1) Пропускаем 12 байт. 2) Загружаем ещё 12 как Х, Y и Z (четырёхбайтовые). 3) Пропускаем 30 байт. 4) Загружаем 2 байта как тип объекта (от 0 до 65535). 5) Пропускаем оставшиеся 32 байта.
Внимание, каждую координату надо разделить на 16 !
Таким макаром извлекаются координаты объектов для абсолютно всех уровней:
http://klimaleksus2.ucoz.ru/Files/NEXT/next_67.jpg
Даже для некоторых сценок (но не у всех есть объекты) :
http://klimaleksus2.ucoz.ru/Files/NEXT/next_68.jpg
А здесь даже видно три бочки с бабочками на острове, которого нет:
http://klimaleksus2.ucoz.ru/Files/NEXT/next_69.jpg
Для Spyro2 всё почти также, только в начале надо прыгнуть не на 48, а на 44 байта; а потом совершить не 12, а 8 прыжков подряд:
http://klimaleksus2.ucoz.ru/Files/NEXT/next_70.jpg
Для Spyro1 ещё не пробовал…
Зато взломал камеру в титрах!! Там вместо третьего и четвёртого субфайлов – перечисление характеристик (по 2 байта) : позиция X,Y,Z и три поворота по осям – не знаю, глобальным (Эйлеровы) или локальным (долгота, широта, крен).
Пока что выгрузил только сами координаты пути (от кучи направлений в SWV будет мало толку, это для 3DsMax подумать надо). Прибухал их как псевдо-объекты и загружаю идентично, только значения координат надо разделить не на 16, а на 4 :
http://klimaleksus2.ucoz.ru/Files/NEXT/next_71.jpg
Считывать так: в чётвертом суб-субфайле титров – сначала прыгнуть на 12 байт, потом считать 4 байта – количество структур, а потом столько-то самих структур по 12 байт:
http://klimaleksus2.ucoz.ru/Files/NEXT/next_72.jpg
Эй, а вам не кажется, что такая ЯВНАЯ буква «S» (там более на локации заставочного экрана) – это неспроста? Ну и что, что зеркально…
but nobody came
|
|
| |
steeldragon | Сообщение # 462 Вторник, 20.08.2013, 20:49 |
Старейшина Драконов
Редактор
«422»
Где: Не в городе Драконов
|
Цитата aleksusklimЗначит физика тоже в третьем суб-суфайле, но надо бы для других уровней попроверять…В тех же Dino Mines физика тоже там же. Вообще, раз физика живых объектов не зависит от физики уровня, этот блок данных должен быть в каждом третьем суб-субфайле.
Цитата (aleksusklim) 3) Некоторые части модели могут исчезать в зависимости от угла и направления камеры. Ну да, есть такое. Правда, у меня они скорее появляются в зависимости от угла и направления камеры.
Цитата (aleksusklim) Какая версия? Оригинальная американская, без патча от парадокса и пиратского перевода. Правда, её я ещё толком не тестировал.
Цитата (aleksusklim) Эй, а вам не кажется, что такая ЯВНАЯ буква «S» (там более на локации заставочного экрана) – это неспроста? Неа, не кажется.
|
|
| |
aleksusklim | Сообщение # 463 Среда, 21.08.2013, 02:08 |
фдулыгылдшь
Редактор
«1066»
Где: Не в городе Драконов
|
Проверил структуру переменных для объектов Spyro1, и она оказалась полностью идентична остальным играм, поэтому всё содержимое без единой правки принимала моя программа. Но начало опять строится по-другому: сначала сдвинуться на 136 байт, а потом сделать подряд 7 прыжков. И снова попадаем к размеру-количеству-структурам. Расположение и свойства (деление на 16) координат абсолютно те же. С индексом типа объекта экспериментов не ставил, но кажется, это снова 2 байта.
Для совместимости с GML (внутренний баг, не позволяющий легко считывать число «ноль» из файла; можно считать сложным путём, но так куда проще!) значение «0» какой-либо координаты выводится как «1» (всё равно его ещё на 16 потом делить), а нулевой тип объекта (который не существует но может появиться при неправильных данных) как «65536».
А ещё, для пущей крутизны, модифицировал SWV и добавил возможность редактирования координат любых объектов! Только в особом режиме, а вставлять обратно их нужно всё равно вручную. Но зато такой механизм нам никогда не будет лишним.
Вообще просмотр всех объектов на модели активируется не автоматически, а только по нажатию «Ctrl+Alt+Up». Считывается для текущего уровня и не пропадает по переходу на другую модель (например в Spyro3 каждый подуровень хранит координаты входа/выхода в другие подуровни и тем более в основной уровень, поэтому есть смысл рассматривал координаты объектов одного мира «в проекции» на модель другого), кнопкой «F9» можно загрузить свой листинг координат (например от другого уровня) – это текстовый документ, в каждой строке которого четыре числа «X Y Z T» через пробел или табулятор – координаты (не поделённые на 16), и тип объекта – число от 1 до 65536. (для движения камеры в титрах тип объекта равен номеру строки, поэтому верхний предел формален). По «Ctrl+Alt+Down» отображение объектов можно скрыть, а по «Ctrl+Alt+Left» и «Ctrl+Alt+Right» активировать режим показа только конкретного типа (что не всегда видно на глаз по цветам пирамидок). Чтобы различать несколько объектов с одинаковыми координатами, я придал каждому небольшой дрейф на плюс-минус 4 пикселя, чтобы сдвоенные пирамидки разъехались. Это можно отменить, и заставить пирамидки быть чётко на своих местах через «Hold Ctrl + Hold Alt + Hold Up».
Теперь редактирование. Осуществляется нажатием «Shift+F9», и далее кнопкой «Y» можно выделить ближайшую к камере пирамидку (по плоскости, высота по вертикали не учитывается). Выделенная пирамидка имеет чёрные рёбра. Если это не та, которая вам нужна, нужно просто нажимать «Y» до тех пор, пока нужная не окажется выделена (дойдёт до каждой обязательно!), если проскочили, то нажатие «T» сбросит выделение, и «Y» начнёт выделять заново. Когда что-то выделено, кнопкой «U» контур пирамидки переместится на плоскости в позицию камеры. То есть высота не изменится, а X/Y объекта станут равны X/Y камеры. Нажатие «i» наоборот, приравняет только высоту Z, оставив координаты на плоскости нетронутыми. Ну а оба сразу заставят объект быть в точке камеры. Для фиксирования результатов (и перенесения пирамидки в контур) нужно ещё раз нажать «Y», а для отмены – «T». В папке программы появится документ «obj.txt» с изменённым листингом координат (в исходном порядке). Его можно передать на вход той же программы, которой он был извлечён (с указанием флага записи), чтобы модифицировать двоичные данные, которые могут быть как частью четвёртого суб-субфайла, так и куском памяти эмулятора. Программа заменит в них только координаты и индексы объектов (которые не должны быть изменены!) и больше ничего, поэтому всё пройдёт безболезненно. Можно менять расположение практически ВСЕГО. Но не всё принесёт пользу – например начальное положение Хантера в Sunrise Spring не заставит его «промахнуться» мимо ступенек, а попытка сдвинуть портал, кажется, сместит только его заголовок… Пробовал двинуть банку с жизнью, но сделал это в дампе, а не файле – банка сдвинулась, а бабочка осталась – видимо, бабочка создаётся в позиции банки на момент запуска уровня.
И на самом деле, не все интерактивные участки уровня – это обязательно живые объекты. Физика мира вполне может и сама всё отследить – поверхность воды, разгон на беговой дорожке, нахождение в сенсорной зоне (появление Бианки, побег МегаКурочки), или пробивание лбом стен (не проверял, но уверен, что объект, который находится возле трещины – всего лишь спецэффект, который должен показать разлетающиеся камешки; а стена так и так сломается…) Но объектов реально много. Все флажки (и паруса), деревья, каждый бриллиантик (даже те алмазики, что упрятаны в сундуки, из которых потом гроздью высыпаются – так они рядом с сундуком и приставлены!), дымок, звуки и просто отметки непонятных координат. Иногда в одном месте (особенно возле драконов Spyro1) сразу несколько разных объектов всунуто.
Однако структура титров в Spyro1 отличается – там все числа по 4 байта, и ещё предстоит выяснить, что к чему относится. Также очень похожая структура в четвёртом суб-субфайле всех сценок. Возможно это тоже движения камеры вместо перечислений объектов.
А ещё я подумал, что все «пространственные кривые» во всех играх (след бианки, траектория пущенных ракет, летающих яиц) – это должны быть однотипные виды данных. А раз камера в титрах задаётся довольно просто (хоть и нерационально – вместо ключевых точек просто список конкретных позиций в каждый момент времени), то возможно, что мы сможем извлекать (и менять при надобности) также все другие координатные кривые. Поэтому хочу для «кривых» сделать отдельную программу (и ещё одну для Spyro1).
Скриншотик объктов Spyro1:
http://klimaleksus2.ucoz.ru/Files/NEXT/next_73.jpg
Спидвей – вот вам и живые объекты:
http://klimaleksus2.ucoz.ru/Files/NEXT/next_74.jpg
Занятно… над глючным полигоном что-то висит. Может там полка какая, или платформа в игре? Похожее бывает над странными одинокими прямоугольниками с другой текстурой:
http://klimaleksus2.ucoz.ru/Files/NEXT/next_75.jpg
Когда-нибудь вместо цветных пирамидок там будут 3D модельки…
Цитата (steeldragon) Ну да, есть такое. Правда, у меня они скорее появляются в зависимости от угла и направления камеры.
О, вот с этим согласен.
Ну что, можете починить? ))
Цитата (steeldragon) Оригинальная американская, без патча от парадокса и пиратского перевода.
??
Я же подсветил: Цитата (steeldragon) На WAD от Spyro3 v1.0 работает превосходно. Цитата (aleksusklim) Какая версия?
Перефразирую:
Какая-какая версия?
Ну просто если «v1.0» относится к Spyro3 или WAD – вряд ли версии действительно так подписаны, а если же к вьюверу – то … Но такой версии никогда не было! Только v1.1 и v1.2. Один-ноль ставлю исключительно на некоторые консольные программы. Совсем ерунду величаю v0.1, но вряд ли она хоть где-то выложена…
but nobody came
|
|
| |
steeldragon | Сообщение # 464 Среда, 21.08.2013, 19:07 |
Старейшина Драконов
Редактор
«422»
Где: Не в городе Драконов
|
Цитата (aleksusklim) Ну просто если «v1.0» относится к Spyro3 или WAD – вряд ли версии действительно так подписаны, Номер версии относится к Spyro3, и образ действительно так подписан: Цитата Spyro - Year of the Dragon (USA) (v1.0).bin ... Цитата (aleksusklim) Ну что, можете починить? )) Скорее доломать окончательно :^) EDIT: Хм. Помните данные, которые я недавно показывал? Похоже, сразу после них в памяти эмулятора идут вот эти "координаты камеры", а может, и просто какие-то системные данные... (Так вот зачем там аж несколько килобайт нулей...) В любом случае, вот файл с данными Sunny Villa: https://dl.dropboxusercontent.com/u...._10.bin
Сообщение отредактировал steeldragon - Среда, 21.08.2013, 20:34 |
|
| |
aleksusklim | Сообщение # 465 Четверг, 22.08.2013, 00:31 |
фдулыгылдшь
Редактор
«1066»
Где: Не в городе Драконов
|
Попробовал исследовать физику мира в Spyro1, и мне кажется, что на вид она ничем не отличается от физики двух других игр. Пытался что-то понять, но земля просто проваливалась по каким-то непонятным законам. А вот тип поверхности изменить у меня так и но получилось, но один раз Спайро, попав в воду, вдруг замер и стал приближаться к камере равномерным движением, а потом полетел дальше «прочь от земли», пока наконец не засчитали проигрыш.
«Вершин» я там так и не нашёл, а за что отвечают многочисленные «FF» не понял. Мне кажется, список вершин идет после того, как все «FF» закончатся. А за ним странные озёра одинаковых байтов, я попробовал их нарушить – и куски видимой модели стали исчезать в зависимости от угла и позиции камеры! Словно физика контролирует отображение графики. Пытался повторить это в Spyro3, но ничего не вышло. Да к тому же физику замка я копировал вместе с графикой, так что подобных данных там нет (а те что есть отвечают не за это). Плюс, у замка (субфайл 034) физика мира находится не в третьем, а втором субфайле (между «землёй» и «небом»). Попробовал перетащить тот же замок из Spyro2, но там все текстуры имели другие индексы, а физика мира _кажется_ полностью одинакова. И та, которая «вода» всё равно не вода, а обыкновенная земля (но, как в замке от Spyro3, прокси-прыжок на стыке даёт потрясающий, а как скейт-то подбрасывает!)
Добавил вьюверу функцию, отображающую LOD модель под любой другой: http://klimaleksus2.ucoz.ru/Files/NEXT/next_76.jpg http://klimaleksus2.ucoz.ru/Files/NEXT/next_77.jpg Актуально использовать лишь для подобных локаций, где LOD содержит много того, чего нет на основной модели. Да и искажений не миновать, поэтому включение только ручное через «Ctrl+Alt+Shift» (вкл – и будет на всех моделях до выкл), а собственный файл можно выбрать через «Shift+F5» (все F-ки заканчиваются, пора навешивать всякие шифты и контролы на них…)
Кстати, если физика когда-нибудь будет взломана, и если она будет содержать вершины или хотя бы как-то выглядеть как 3D модель, то я хочу, чтобы вьювер отображал её как блестящие гранёные полигоны с освещением и нормалями (ну типа как золотой шрифт), а если мы ещё и тип поверхности распознаем – вообще шикарно будет (разные цвета).
Цитата (steeldragon) Номер версии относится к Spyro3, и образ действительно так подписан:
Оу, понял, извините. Кажется, этот образ у меня тоже где-то есть…
but nobody came
|
|
| |