You are not logged in.
Pages: 1
Интересно, что у RWGraphics есть evaluation-версия. В частности, RW3.7 которая лежит на public.sannybuilder.com. Единственная "полная" версия имеющаяся в паблике - RW 3.4 D3D8.
Основное отличие - отрисовка логотипа "RW" слева снизу без возможности его отключить стандартными средствами (аналог RpLogo).
Не знаю, насколько это легально, но я отключил рендер просто сделав хук функции _rwCameraValRender.
extern "C" void _rwCameraValRender(RwCamera * camera);
Есть ещё одна загадка для меня: после очистки карты во время загрузки splash-заставки начинают слишком быстро меняться из за чего возникает эффект мерцания. Возможно кто знает как "вылечить" этот эффект?
В игре каждый загруженный файл из GTA.DAT добавлял к CLoadingScreen::m_numChunksLoaded единицу вызывая CLoadingScreen::NewChunkLoaded(). При этом максимальное количество чанков (140), при котором загрузка достигает 100% фиксировано в exe. В итоге, после правки gta.dat игра загружается за меньшее количество чанков и CLoadngScreen продолжает рендерить спрайт.
Нужно посмотреть какое максимальное число выходит в CLoadingScreen::m_numChunksLoaded и заменить максимальное число на на него везде, где оно используется.
CPopulation - статический экземпляр объекта.
Не знаю как там с GTA4/5, но в GTA3 - нет:
http://git.nick7.com/x-gtasa.git/blob/H … txt#l18263
Можно, конечно, объединить поля в единую структуру, но я, по возможности, придерживаюсь определений Rockstar.
Для начала - хотелось перейти полностью на собственный код не сильно отступая от идеологии, а потом уже думать, что можно улучшить.
Сейчас это вообще ко всему репозиторию относится.
Единственное, где я отошёл от оригинального EXE - вынес большинство обращений к WinAPI в OSWrapper, как было сделано на мобильных платформах.
По сабжу:
- добавил возможность сборки с OpenGL (необходимо конвертить ресурсы).
- и со старыми SDK - RW 3.4, RW 3.3 (поддержка сборки с последним, скорее всего, позднее будет убрана).
- более-менее стало работать радио, правда, разобрано оно ещё не до конца.
Кстати, забавно, что UserTrack Player не воспроизводит монофонические файлы в принципе (Хотя, OGG воспроизводит как стерео - пофиксил на скорую руку).
А поддержка WAV сделана только для одного единственного варианта заголовка RIFF - опять же, добавил небольшой фикс.
Реализация MP3 и ещё пары форматов реализована через библиотеку QickTime, но, что-то не особо хочется заниматься подобными извращениями. Думаю, лучше перекатиться на какую-то опенсорсную либу.
Ходили слухи, что на ранних этапах разработки MTA (еще в период GTA3/VC) им помогали сами рокстаровцы, во всяком случае частью документации по коду игры. После скандала с Hot Coffee, вроде как перестали. Но это слухи на уровне ОБС.
Если такое действительно имело место быть - хотелось бы взглянуть надокументацию.
Вероятнее, что просто есть билды с более подробными логами, отладочной инфой или экспортом символов - различных версий исполняемых файлов же довольно много.
Касательно .dll - там получается порядка 100 хуков.
Очень оптимистичный прогноз ^_^. По большому счёту, чтобы получить рабочую dll, нужно заменить достаточно много моих функций с макросом __DUMMY() - а их только при запуске игры вызывается около 300. Плюс перехватить обращения к глобальным объектам.
Кстати, CPopulation имеет только статические поля, поэтому, по-хорошему, на каждое его поле должна быть своя ссылка, иначе, опять-таки, будем привязаны к одному .exe.
Работы с ресурсами в RWG практически нет, если не считать чтение RwStream. Там по коду получается совсем чуть-чуть, строчек триста, и это именно та часть, которая сильно помогает разобраться в структуре объектов RW.
Я сюда включаю работу с RwFrame, RwAtomic, RwImage, RwRaster, RwTexture и т.д. Сам RWGraphics тут, по сути, выступает в роли менеджера объектов этих типов, предоставляя более-менее кроссплатформенный API.
Текущая реализация в ogRW.cpp не настолько гибкая без системы плагинов - на мой взгляд, довольно неплохой фишки. Сейчас там, практически, аналоги Rw-структур, только с методами вместо функций. Неплохое начало, но на более-менее рабочую замену RW нужно ещё N-ое количество времени. Если это действительно интерсено, то можно создать проект в солюшене и постепенно переписать необходимый набор функций, но я бы пока что переключился на более актуальные задачи - по крайней мере, мне всё сразу не потянуть.
Я сейчас занимался аудио (ветка work7), так как эта область относительно нетронута и мне интересна. Попутно ещё смотрю xbox-версию, она довольно похожа на ПК, многие структуры сходятся, хотя и имеются интересные отличия. Например я восстановил забавные штуки типа CMemoryHeap и CMemoryMgr::PushMemId.
И напоследок у меня вопрос - откуда в 2009-м было известно название некоторых невиртуальных классов (например, СAERadioTrackManager)? Ведь RTTI не хранит строки для названий невиртуальных классов.
Во-первых, как предполагается это отлаживать? gta_sa_dll неспроста был именно .dll - там я шел, последовательно заменяя куски кода и проверяя, как заменилось. Более того, можно было вызвать оригинальную функцию и сравнить результат. Как это предполагается здесь?
Честно говоря, создавать огромную dll-ку с тысячами хуков, привязанных к одной реализации - сомнительное удовольствие. Хотелось бы замахнуться подальше. Тем более, что сейчас мы имеем гораздо больше информации о движке SA, чем шесть-восемь лет назад.
В крайнем случае, кстати, никто не мешает сделать dll с хуками, подключив к ней необходимые заголовки из проекта и посмотреть как себя ведёт оригинальный исполняемый файл.
Дальше... имеет ли смысл цепляться за библиотеки от RWG ? Учитывая количество кода, которое из них используется, не проще ли его переписать? (я ведь даже начинал это, и какой-то ощутимый кусок сделал)
Это не первоочередная задача, но, думаю, к этому всё и так придёт, если проект будет как-то развиваться.
RenderWare Graphics берёт на себя, на мой взгляд, не сколько рендер, сколько работу с ресурсами: стоит ли сейчас тратить на это время, когда есть ещё куча нерешённых проблем?
И еще... Нужно ли тянуть заведомо устаревшие решения? Например, те же пулы, в пятерке почти такие же, но аллокация в них гарантировано за O(1). Всех изменений - по паре строчек в конструкторе, alloc и release.
Зависит от конкретного случая - в данном случае стоит поправить. Обычно, я делаю такие фиксы опциональными при помощи макроса - и для наглядности, и чтобы была возможность собрать наиболее приближенный к оригиналу вариант (к примеру, см. _USE_WIDESCREEN_FIX).
Вот минимальный third-party для сборки проекта. Напомню, что в репо он не входит (RW - по понятным причинам, а DirectX SDK лучше скачать с сайта Microsoft со вчеми сопутствующими утилитами).
Сап, форум.
Представляю urbi et orbi необычный проект, в некотором роде развитие gta_dll. Если подробнее, то это набор исходников движка SA на С++, восстановленных на основе реверса оригинального .exe, а также PS2/Android/XBOX версий как самой игры, так и предыдущих её частей.
Разумеется, на данный момент исходники покрывают небольшую часть движка. Де-факто, цель проекта - EU/US 1.0. Звучит это весьма амбициозно, и не факт что работоспособный вариант вообще будет иметь место быть, но материал, появляющийся в результате реверса, можно использовать в модификациях уже сейчас - для множества функций подписаны адреса, для полей - оффсеты.
Отмечу, что в мои планы, в общем-то, не входит создание полноценного .exe в одиночку или даже силой 2-3 человек, так как это потребует огромного количества времени. Я лишь разбираю интересные мне части кода. С другой стороны, силами камьюнити сделать более-менее рабочую версию вполне реально - всё зависит от желания и народа. На данный момент над проектом работали я и Seemann.
И да, обращу внимание на то, что проект не является модификацией сам по себе - мы исследуем в первую очередь оригинальные исполняемыe файлы, работающие с немодифицированными ресурсами.
более-менее разобран rw skeleton (базовые исходники приложения, входящие в состав rw sdk).
основная часть 2D (CSprite, CFont, CText и т.д.), более-менее рабочее меню.
частично рабочий стриминг (CStreaming).
из аудио частично разобран стриминг и frontend-SFX.
игра загружает большинство ресурсов (CFileLoader), однако, рендер толком не разобран, поэтому сейчас вместо игры временно рендерится заглушка.
практически не тронуты скрипты, не начат разбор AI и игровой физики.
Проект представляет собой git-репозиторий, доступный для чтения всем.
http://git.nick7.com/x-gtasa.git
Если ты владеешь C++, имеешь базовые навыки работы с git и хочешь поучаствовать, то ознакомься с README, пиши в тему или в личку - выдадим права на запись.
Необходима Visual Studio 2013 (кроме того, удобно, что в ней доступен git, но разумеется, можно использовать и другой клиент). Сборка происходит с toolset'ом v120_xp.
В проект не входит RenderWare SDK 3.7 (вообще, необходим, как минимум, 3.5+) и Direct X SDK, которые необходимы для сборки (подробнее про пути third-party читать в readme.txt). Для сборки с RW D3D8 нужен Direct X 8 SDK; OpenGL билды на данный момент не поддерживаются.
Для запуска приложения необходимы ресурсы от PC-версии (для D3D8/OpenGL-билдов необходима пересборка ресурсов (варианты подключения ресурсов приведены в readme).
Стабильная ветка для сборки – master. Debug/Metrics-билды имеют консоль (~) и вывод дополнительной отладочной информации.
По поводу __DUMMY(), а также именования методов, полей классов и глобальных переменных подробнее расписано в readme.txt.
Следует обратить внимание, что Final (Release)-билды используют /MT вместо /MD.
listener во времена GTA4 выкладывал реверсированные исходники основных классов и шаблоны для 010 для архивов и текстур. Надеюсь, когда-нибудь в будущем он выложит что-то подобное. Время OpenLosSantos!
ну текстуры не так уж далеко шагнули (да и что с ними будет, вообщем-то). во всяком случае, когда я в конце 2013-го смотрел PS3-версию, отличия от GTA4 были минимальны.
больше интересны его пояснения о работы движка в общем плане.
VcSaJen wrote:Время OpenLosSantos!
Кстати об Опен. Когда-то видел на паблике сорцы с подстрокой OpenGTA то ли в название, то ли в коде. Сейчас не нашёл. Видимо, пропали после падения паблика в даун без бэкапов. Кто-нибудь расскажет, что это был за проект?
это gta_dll, насколько мне известно, эта штука далее не развивается.
вообще, если интересно, есть неанонсированный проект, который является логическим продолжением open san andreas.
Гуд выложил скрины тут
http://gtaforums.com/topic/388289-rel-o … 1067317821Технические детали шифрования подробно могут рассказать Alexander и listener, если захотят)
Напоминает сталкер, там файлы каждого следующего архива gamedata перегружали предыдущий. Интересно, можно ли тут аналогично делать патчи?
Если на видеокарте меньше 2G памяти, можно не пытаться запускать
Сам не ставил, но на GTX 650 1Gb попробовал - вполне играбельно. Вообще, я ожидал гораздо более плохой оптимизации.
А будет что-нибудь подобное xliveless?
так ведь нету же live ?
сгенерировал иерархию виртуальных классов для GTA San Andreas POL 1.01 на основе RTTI
http://gta.nick7.com/stuff/gtasa/pc-classes.html
возможно, окажется полезным
Есть ли alice или как там я про lua язык для san andreas просто в mta поиграл и хочу некоторорые скрипт перенести в gta sa допустим скрипт шторм ну тоесть админ пишит в админке 100 и вода по земле летает кулльно бы
на вот тебе, у тебя закончились: ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
чтобы не создавать тему, напишу сюда.
у кого-нибудь есть есть немецкий gta_sa.exe ? знаю, что он, практически, не отличается от обычного US, но всё же.
ну и вообще, если есть какой-нибудь "особый" .exe, то за ссылочку буду весьма признателен.
Из-за вертикальной прокрутки не видно пары пикселей в самом низу, в итоге не видно символов "_" или "." .
Браузер - Chromium 35.0. В Nightly (последний огнелис), кстати, всё нормально.
Навскидку могу предложить "грязный" фикс:
.syntaxhighlighter { padding-bottom: 1px !important; }
Кстати, если в теге [code] указать несуществующий язык, то страница будет выдавать алерт. Если это дебаг, то лучше исправить на console.error или что-нибудь типа того.
новые строки в GXT:
http://gta.nick7.com/stuff/gxt/sa-mobil … an-new.txt
http://gta.nick7.com/stuff/gxt/sa-mobil … an-new.txt
осталось несколько хэшей, я не могу найти к ним ключи (пробовал брутом, но какая из коллизий нужна - я не знаю)
вброшу, кое-какие исходники от TXDFucker'a, что ли.
начнём с простого - заголовок текстуры в DAT-файле:
/** * Cached texture info struct * @size 8bytes */ struct CACHEDTEXTUREHEADER { WORD m_wHash; // +0x00 @see HashString(szString) definition WORD m_wFormat; // +0x02 @see TEXTURETYPE definition WORD m_wWidth; // +0x04 texture width (px) WORD m_wHeight : 15; // +0x06 texture height (px) WORD m_bMipmaps : 1; // mipmaps (boolean) }; /** * San Andreas Header * @size 12 bytes */ struct CACHEDTEXTUREHEADERSA: public CACHEDTEXTUREHEADER { DWORD m_dwSize; // +0x08 texture size };
если SA, то далее идёт 4 байта - ключевой символ для RLE-компрессии (об этом ниже).
далее в любом случае идёт растр. в VC размер текстуры рассчитывается на основе m_wFormat, который примерно соответствует формату текстуры из OpenGL.
вот, к примеру, хеширование. используется в кэше как img=, png= и первые два байта в заголовках текстур (только младшие 16 бит)
DWORD HashMem( const BYTE* pMem, DWORD nSize ) { DWORD dwResult = 0; if( !pMem ) return 0; for( DWORD i = 0; i < nSize; i++ ) { dwResult += (dwResult << 5); dwResult += pMem[i]; } dwResult += (dwResult >> 5); return dwResult; }
вообщем-то всё просто, да. на основе этой функции реализованы HashString, HashFile и т.д.
идём дальше. RLE-компрессия. эффективно сжимает многие текстуры, особенно элементы интерфейса. тут прототип не сходится с тем, что в игре, но я думаю, если кому надо - то уберёт лишний код.
/** * Sa Mobile data unpacker */ DWORD RLEDecompress( LPBYTE pIn, LPBYTE pOut, DWORD dwSize, DWORD dwOutSize, DWORD nPixelBlockSize ) { DWORD nOut = 0; // outPos DWORD nIn = 0; DWORD nBlockSize = max( sizeof(DWORD), nPixelBlockSize ); BYTE nControlChar = pIn[0]; nIn += sizeof(DWORD); for( ; nIn < dwSize; nIn += nBlockSize ) { // normal copy if( pIn[nIn] != nControlChar ) { if( nOut + nBlockSize > dwOutSize ) { if( nOut + nPixelBlockSize <= dwOutSize ) { memcpy( pOut + nOut, pIn + nIn, nPixelBlockSize ); nOut += nPixelBlockSize; } return nOut; } memcpy( pOut + nOut, pIn + nIn, nBlockSize ); nOut += nBlockSize; } // we found a control char else { BYTE nCount = pIn[nIn + 1]; nIn += sizeof(BYTE) * 2; for( BYTE j = 0; j < nCount; j++ ) { if( nOut + nBlockSize > dwOutSize ) { TRACE( "GTA::RLEDecompress: [ERROR] block unpacking failed [0x%02x:%02x]\n", nControlChar, nCount ); return nOut; } memcpy( pOut + nOut, pIn + nIn, nBlockSize ); nOut += nBlockSize; } } } return dwOutSize; }
спрашивайте, если что-то интересует.
на компе это не актуально, так как там есть txd.
и дело не в RtPNG, а в TextureDatabaseEntry - он имеет метод для загрузки текстуры из PNG вместо DAT:
TextureDatabase::GetPNGFilename(char *,char const*) TextureDatabaseEntry::LoadPNG(char const*)
идея понятна - возиться с огромным тройным кэшэм не очень удобно. скорее всего, кэш был собран из png-файлов перед релизом, а сами разработчики работали с png.
Интересно, что VC и SA поддерживают загрузку текстур напрямую из PNG минуя кэш.
В принципе, можно попробовать разблокировать эту фичу, но это по-любому серьёзно повлияет на производительность.
годнота.
теперь толпа школьников будет негодовать почему почти все клео-моды не идут на SA.
надо написать по-тупому, красными буквами, что они НЕ совместимы и ДОЛЖНЫ быть переписаны.
Будет ли обновление SB? Или все ждут андроид версию на следующей неделе?
думаю, лучше подождать. я сам планирую выпустить TXDFucker после выхода под андроид.
чё-то я с трудом втыкаю в gta3sa, может, iOS-файлы нужно загружать как-то по-особому?
глянул по диагонали, нашёл пару интересующих меня функций, но толком так и не понял как тут сделаны виртуальные таблицы, и почему большая часть строк не имеет xref.
чисто в плане логики - зачем выгружать звук и тут же его загружать?
алсо, насколько я помню скриптинг в СА, то ты создал поток и тут же начал его выполнять в создающем потоке, то есть выполняешь свой скрипт одновременно дважды.
@Alien - для того, чтобы получить ELF из BIN (и не только) есть набор консольных утилит с интерфейсом "PKG Toolkit GUI".
также, для PS3 вот здесь есть набор скриптов, с которых можно (нужно) начать. кроме того, стоит поискать раздачу с PS3 SDK (рекомендую 3.70).
по иксбоксу - для распаковки юзается xextool (вроде, на сайте дагерона была инфа по теме)
Pages: 1