Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Темы - HoRRoR

Страницы: [1]
1
Многие из посещающих этот раздел знают, насколько сложен труд ромхакера. Но далеко не многим приходится менять свой взгляд на подобные увлечения по ходу своего профессионального роста, получения опыта и прочего. Я хочу сказать, что за долгие годы увлечения ромхакингом, из подхода дилетанта я вырабатывал свой подход к ведению проектов. А затем, получив опыт на реальной профессиональной практике, понял, что в этом подходе следует доработать.

Суть этого прохода проста и знакома всем специалистам — просто делать всё грамотно, красиво, продуманно, качественно. Чтобы в итоге не оставалось так называемого технического долга — именно это залог того, что проект не увязнет в необходимости кучи монотонной работы и рефакторинга проекта, которые убивают весь энтузиазм. Главная составляющая этой концепции — автоматизация и качественная архитектура проекта. Да, это требует много усилий, но куда меньше, чем суммарное выполнение вручную раз за разом одних и тех же операций.

Так вот, к чему я клоню. У команд Consolgames и Exclusive накопилось некоторое количество проектов, которым не помешало бы дать пинка. Стоят они по нескольким причинам, но, будучи ответственным за техническую часть, я могу сказать, что мешает мне довести всё до финиша. Раньше это было отсутствия энтузиазма, теперь это ещё и критически малое количество свободного времени. Т.к. мы привыкли делать всё с умом, то методы долота и зубила в вёрстке перевода нам не помощники. В связи с этим, чтобы эти проекты и Consolgames в том числе не канули в лету, я решил попробовать в очередной раз привлечь к проектам заинтересованных в этом людей. Да, чёрт возьми, мы нуждаемся в программистах! Но не просто в дилетантах, а в знающих своё дело людях, готовых тратить своё личное время на пользу обществу, готовых и способных следовать требованиям.

Итак, нам требуются программисты, обладающие хотя бы одним из следующих навыков:

  • C++
  • C++/Qt
  • Delphi
  • Java

Что именно надо делать? В целом — разрабатывать инструментарий для локализации игр, а более конкретно:
  • Производить тотальный рефакторинг старого кода.
  • Разрабатывать инструментарий для работы с различными данными и форматами.
  • Дорабатывать уже существующие инструменты: добавлять новый функционал, исправлять баги, производить рефакторинг.
  • Разрабатывать инструменты для визуального редактирования данных (редакторы шрифтов, текста, etc).
  • Разрабатывать презентабельные патчеры с маловесным GUI (эх, мечтаю об уровне кряков :) ).

Естественно, всё при моей координации и непосредственном участии в процессе. Но... следует удовлетворять ряду требований. А именно:
  • Следовать установленному код-стандарту и спецификациям.
  • Следовать установленным шаблонам программирования.
  • Не делать весомых изменений без предварительного согласования.
  • Писать независимый от какой-либо платформы код, если это возможно. Т.е. не использовать специфические фичи ОС и компиляторов, если это изначально не задумано.

В общем-то, всё не так строго, как звучит, но всё же соблюдение этих правил имеет большое значение. Я надеюсь, что найдётся хотя бы один программист, способный и готовый на всё это.

Каковы конкретные цели на будущее? Ну, мне бы очень хотелось прежде всего добить два проекта — Metroid Prime 3: Corruption и Silent Hill: Shattered Memories. Более конкретно? Окей.

Metroid Prime 3: Corruption:
  • Написать презентабельный патчер. Точнее — маловесные GUI для него.
  • ТОТАЛЬНО отрефакторить существующий код для работы с образами Wii, стянутый из WiiScrubber'а, автор которого писал абсолютно всё в одном месте. Половина работы в этом направлении уже сделана. Относится и к SHSM, к слову.
  • Отрефакторить код для работы с текстурами Wii.
  • Добавить функционал в конвертор текста.
  • Отрефакторить всё остальное.

Silent Hill: Shattered Memories:
  • Дописать парсер ресурсов, унифицированный для всех платформ.
  • Добавить поддержку текстур PSP и PS2 в конвертор.
    Тут мы имеем дело с квантованием текстур с альфа-каналом, придётся искать и прикручивать ещё одну библиотеку. Изначально используется nvidia-texture-tools. Дело усложняется тем, что мало где учитывается альфа-канал при квантовании — в распространённых форматах при индексированной цветности обычно используется только флаг прозрачности.
  • Доработать (читать как «написать, используя наработки») код для работы с ISO-образами.
  • Написать патчер.
  • Может ещё что, уже всё и не припомню.
  • И, конечно же, отрефакторить всё к чертям.

Общие задачи:
  • Продумать структуру репозитория.
  • Продумать структуру общих классов и исходников.
  • Создать унифицированные интерфейсы к классам образов, архивов и прочего - надо же привести всё к общему знаменателю!
  • Разобраться с системой сборки — что использовать, как использовать, зачем и почему.
  • Заставить это всё компилироваться и работать :)

Всё это планируется делать под флагом опенсорса. Хотя, я бы сделал некоторые ограничения — например, открывать исходники только после релиза перевода. Но, к сожалению, для этого нужен свой сервер для репозитория, которого пока нет. В качестве системы контроля версий будет использоваться SVN.

Если у кого-то есть мысли по поводу всего этого — добро пожаловать, излагайте их в конструктивной форме :)

2
Hard'n'Soft / Отладка в Linux
« : 06 Май 2011, 16:33:03 »
Собственно, очень надо узнать кое-что насчёт отладки под Linux. В частности - как реализованы breakpoint'ы.
Представление об этом имею - если есть возможность, используется аппаратная установка брейкпоинтов, если нет - то применяется прерывание int 3 (знаменитый байт 0xCC) и т.п. С этим всё ясно, интересует другое. Собственно, есть такое вот вопросы:

1. Например, запустили мы под отладчиком процесс (как вариант - подключились через ptrace). Как происходит замена инструкции, куда ставится breakpoint, на 0xCC? Я так понимаю, исполняемый файл отображается в адресное пространство процесса. Нам надо получить доступ на запись в указанную страницу, при этом в сам файл мы писать не собираемся, вот на этом моменте моё понимание кончается - нигде в интернете и в литературе не нашёл подробного объяснения. Страница копируется и отображается вместо файла или как? И как это делается на уровне кода и системных вызовов?

2. В каком адресном пространстве выполняется код разделяемых библиотек? Области отображения совпадают для всех процессов или как?

3. Главный вопрос - если мы, например, в gdb, ставим брейкпоинт в функцию из so, как это реализовано таким образом, что другие процессы могут спокойно продолжать использовать этот же so? Ответ такой же, как и на первый вопрос?

3
Пришла мне тут безумная идея, которую при текущих обстоятельствах осуществить вряд ли является возможным, ибо идея утопическая. Суть такова: переписать Crash Team Racing в виде преимущественно сетевой игры на PC. Вроде Trackmania, Teeworlds, etc. Будет очень весело поиграть, например, ввосьмером на одной карте. А в случае чего можно будет и новых фишек / возможностей добавить.
С этой целью стал я "реверсить" форматы, начал с формата карт. Раскопать пока удалось самую малость - уделяю этому делу не так много времени и внимания, но по-мелочи результаты есть. Пришлось усовершенствовать дебаггер на базе pcsx - добавил некоторые брякпоинты на обмен данными с GPU (а вообще - серьёзно подумывал, не переписать ли там систему брякпоинтов и вьюверов регистров / памяти с нуля, по-человечески, но это пока без особой надобности).
Повторюсь, что целью скорей является интерес, чем стремление к осуществлению идеи. Посему могу забросить всё это дело на любой стадии, просто потеряв этот самый интерес.

Тему, собственно, создал в основном с целью узнать общественное мнение по этому поводу, а заодно и вести своеобразный дневник раскопок, составляя спецификацию форматов и раскрывая особенности игры (эх, как интересно было слушать особенности технической реализации Battle City из уст АнС'а!).

Пока опишу что нарыл. Не технически грамотно, а просто, на словах, ибо пока особенно описывать нечего. В качестве подопытного экспоната взял карту Dingo Canyon, ибо идёт она первой в паке карт. Хранятся карты, как и многие другие данные, в файле BIGFILE.BIG. Формат его чертовски прост - нулевой инт в начале, затем количество файлов, а затем пары unsigned int номер сектора внутри файла / размер файла. Ни имён файлов, ни какой-либо ещё информации нет.
Карта состоит из двух, может более файлов. Один файл - текстуры, которые, я так понимаю, прямоком грузятся в видеопамять без особых преобразований (единственно что - грузятся областями, чтобы не затереть уже присутствующие там данные).
Следующий файл - сама карта, содержащая всю остальную информацию. Правда в память грузится ещё один файл такого же или очень схожего формата - возможно, это фоны и дальние пейзажи, ибо имена объектов преимущественно "big". Ясно станет позже.
Процесс загрузки карты происходит так: в начале файла присутствует размер непосредственно карты, по совместительству некий указатель на "хвост" файла. Ни размер, ни хвост к карте как таковой не принадлежат. Сама карта начинается со смещения 4 сразу после размера. А в хвосте хранится список смещений всех указателей внутри файла карты - сделано это для того, чтобы все относительные указатели (указатели внутри файла) превратить в абсолютные - указатели внутри оперативной памяти. После преобразований эти данные отбрасываются.
Первое, на что я обратил внимание в карте - присутствие именованных объектов. Сами имена не используются, ибо многие из них обрезаны. Но благодаря этому копать стало немного легче. Примерно в начале файла идёт список экземпляров объектов со своими параметрами и указателями на сами объекты, где уже хранятся модели, анимация и другие данные. При этом у некоторых объектов существует несколько моделей - low для отображения вдали (с самым низким качеством), med - для среднего расстояния и hi - для самой близкой дистанции. Сделано это для экономии вычислительных ресурсов.
В данный момент я пытаюсь узнать, в каком формате хранятся вертексы объектов и данные о текстурах. Сами потенциальные вертексы я нашёл, теперь эксперементирую.

4
Выкладываю две утилитки из своего инструментария для FF8.
1. FF8IMG v0.1 - утилита для извлечения файлов из PSX-версии (проверялась только на NTSC).
Использование:
FF8IMG.exe <действие> [ключи] <Входные файл(ы)/Входная папка> <Выходная папка>
Действия:
  • -img - извлечь файлы из образов дисков или из файлов FF8DISC?.IMG. В качестве входных файлов надо указать четыре файла, или один файл со знаком вопроса в месте, где должен быть номер диска.
  • -res - извлечь ресурсы из ovl-файлов. В качестве входной папки надо указать папку с файлом main.ovl (та же самая папка, куда распаковывались архивы).
Ключи:
  • -f<Папка> - установить входную папку. Можно использовать, чтобы не писать путь для каждого из четырёх входных файлов.
  • -s<SLUS> - путь к экзешнику. Если указан, распакуется файл menu\mngrp.bin.

Примеры использования (оба варианта эквивалентны):
  • FF8IMG.exe -img -fC:\MyISO FF8CD1.bin FF8CD2.bin FF8CD3.bin FF8CD4.bin C:\outdir
  • FF8IMG.exe -img -fC:\MyISO FF8CD?.bin C:\outdir
Запакованные файлы при извлечении не распаковываются.

2. FF8MIM v0.1 - вьювер графики локаций. Открывает MIM-файлы (field/mapdata/??/*.mim). Для открытия файлов из PSX-версии необходимо, чтобы рядом лежал файл .dat с таким же именем. Если файл из PC-версии, необходим файл .map.
Локация состоит из "анимаций" (я их так называю, но может быть и всего один фрейм) и фреймов. Выходное изображение строится из комбинаций анимаций. Если установлен чекбокс "Show this animation", анимация будет всегда выводиться с выбранным фреймом. Таким образом можно строить результирующее изображение.

Из косяков:
  • Не открывает некоторые локации, выдаст какую-нибудь ошибку
  • Возможно некорректное отображение некоторых локаций, в частности ошибка приоритетов вывода слоёв/тайлов
  • Есть один неизвестный тип отображения тайлов, поэтому некоторые локации могут выглядеть слегка неправильно.

5
Картриджи / диски / CD-образ на DVD?
« : 27 Август 2009, 15:53:43 »
Сабж таков: допустим, мы бинарным образом взяли и записали на DVD образ CD в формате Mode2/Form1/2352 - возможно ли будет чтение такого диска DVD-приводами, или же на аппаратном уровне это будет прочитано в режиме Mode1/2048? В частности интересует PS2, хотя я почти уверен, что ничего из этого не выйдет и приставка просто откажется читать DVD там, где должна читать CD.

6
NES / Dendy / [ Time Lord ] Сферы и драконы
« : 30 Март 2009, 18:41:59 »
В общем, в далёком-придалёком в детстве приходилось мне играть в одну игру на NES. Вид сбоку, управляешь парнем, вроде как собираешь некие сферы. И, вроде бы как, надо собрать все сферы на уровне, а потом сразиться с драконом (хотя, может это лишь один из боссов). Вполне возможно, что я что-то напутал, просто от воспоминаний остались обрывки. Ещё помню деталь, но не знаю, из это ли игры - кажется, на втором уровне присутствуют возвышенности(ть?) как в Battletoads (хотя, может это воспоминание оттуда и есть). И в последней возвышенности есть спуск к дракону:
___________
|\_/ |  |\*/ |
\|_|/   \|_|/
___________

Но я не уверен, что так и есть.
Ещё вспомнилось - вроде как на третьем уровне есть сфера, которая при приближении поднимается выше, т.е. там надо додуматься, как её взять. И вроде собаки на том же уровне есть...

7
Решил я тут осуществить свою давнюю мечту - написать генератор паролей LNB (мечтал ещё со времён смутного представления о ромхакинге) - что-то получилось.
Работоспособность ещё стоит довести до ума, но в последней версии все проверенные мною варианты работали отлично.
Ещё не осилил локации - по идее там 103 места, куда можно попасть из пароля, все их проверять даже заменой байта во VRAM - не очень легко. Как нибудь в финальной версии доделаю и отсортирую по порядку. Если кто хочет помочь - я только за.

Littlle Ninja Brothers Password Generator v0.8a

8
Дофига лет назад у меня была сега. В один прекрасный день она претерпела нехилый такой ударчик, в результате чего корпус в хлам, провода порваны и поломана платка с фишками питания и выхода сигнала, однако сама главная плата не пострадала (вроде бы). В общем, все это дело было собрано вновь, только иногда глючил джойстик. Ну я по своей юнешеской глупости решил перепаять разъем с другой платы, в результате чего он вообще работать перестал.
Сейчас, спустя много времени, решил я приставку реставрировать. Однако, когда я её включил - она стала выдавать ч/б сигнал. Я перепаял все, чего тогда касались мои руки и выпаял разъем под джойстик. Но ничего не изменилось...
Собственно, прошу у гуру помощи - где я мог напортачить? Учитывая обстоятельства - велик шанс, что что-то спалил.
Сразу говорю - я с мобилы, так что по ссылкам попрыгать и посерфить я не смогу, доступ к компу, да еще и с инетом, получу нескоро.
Заранее спасибо.

9
В общем, есть чипованная соня (чиповал сам, если это может быть причиной).
Всё работает, всё пашет, но проблема с сохранением в Shadow of the Colossus (Dirge of Cerberus (с переводом от Exclusive) говорила что-то вроде "ошибка при создании сохранения", но, тем не менее, сохраняла). В Soul Calibur 3 сохраняется вообще без проблем. Саму карту покупал "слева", явно не фирменная.
Можно ли как-нибудь решить проблему?

10
В общем, сабж:

Цель:
Корректно собрать образ.

Требования:
Сборка по заранее созданной таблице LBA. То бишь сектора должны быть заданы такие, какие укажу я. Желательно генерить имейдж со всеми необходимыми для PSX данными.
Было бы просто замечательно, если бы это можно было сделать средствами Дельфи.

Разыскивается:
Прога, умеющая это делать, информация о том, как это сделать или сырцы/модули/компоненты Дельфи :)

Прошу помощи для решения данной проблемы :)

Ещё бы хотелось спросить, если на форуме человеки добрые, в форматах образов разбирающиеся? Очень хотелось бы научиться самому их генерить. Но, к сожалению, даже полной информации о RAW-данных сектора не нашёл :(

Страницы: [1]