#1 Re: Программы для GTA » [SA|WIP] X-GTASA » 13-08-2015 14:33

Интересно, что у RWGraphics есть evaluation-версия. В частности, RW3.7 которая лежит на public.sannybuilder.com. Единственная "полная" версия имеющаяся в паблике - RW 3.4 D3D8.

Основное отличие - отрисовка логотипа "RW" слева снизу без возможности его отключить стандартными средствами (аналог RpLogo).
Не знаю, насколько это легально, но я отключил рендер просто сделав хук функции _rwCameraValRender.

extern "C" void _rwCameraValRender(RwCamera * camera);

#2 Re: Программы для GTA » Проблемы с Map Cleaner - ом » 23-07-2015 16:58

wmysterio wrote:

Есть ещё одна загадка для меня: после очистки карты во время загрузки splash-заставки начинают слишком быстро меняться из за чего возникает эффект мерцания. Возможно кто знает как "вылечить" этот эффект?

В игре каждый загруженный файл из GTA.DAT добавлял к CLoadingScreen::m_numChunksLoaded единицу вызывая CLoadingScreen::NewChunkLoaded(). При этом максимальное количество чанков (140), при котором загрузка достигает 100% фиксировано в exe. В итоге, после правки gta.dat игра загружается за меньшее количество чанков и CLoadngScreen продолжает рендерить спрайт.
Нужно посмотреть какое максимальное число выходит в CLoadingScreen::m_numChunksLoaded и заменить максимальное число на на него везде, где оно используется.

#3 Re: Программы для GTA » [SA|WIP] X-GTASA » 21-07-2015 20:45

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, но, что-то не особо хочется заниматься подобными извращениями. Думаю, лучше перекатиться на какую-то опенсорсную либу.

#4 Re: Программы для GTA » [SA|WIP] X-GTASA » 15-07-2015 13:45

Ходили слухи, что на ранних этапах разработки MTA (еще в период GTA3/VC) им помогали сами рокстаровцы, во всяком случае частью документации по коду игры. После скандала с Hot Coffee, вроде как перестали. Но это слухи на уровне ОБС.

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

#5 Re: Программы для GTA » [SA|WIP] X-GTASA » 13-07-2015 22:36

Касательно .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 не хранит строки для названий невиртуальных классов.

#6 Re: Программы для GTA » [SA|WIP] X-GTASA » 11-07-2015 01:37

Во-первых, как предполагается это отлаживать? gta_sa_dll неспроста был именно .dll - там я шел, последовательно заменяя куски кода и проверяя, как заменилось. Более того, можно было вызвать оригинальную функцию и сравнить результат. Как это предполагается здесь?

Честно говоря, создавать огромную dll-ку с тысячами хуков, привязанных к одной реализации - сомнительное удовольствие. Хотелось бы замахнуться подальше. Тем более, что сейчас мы имеем гораздо больше информации о движке SA, чем шесть-восемь лет назад.
В крайнем случае, кстати, никто не мешает сделать dll с хуками, подключив к ней необходимые заголовки из проекта и посмотреть как себя ведёт оригинальный исполняемый файл.

Дальше... имеет ли смысл цепляться за библиотеки от RWG ? Учитывая количество кода, которое из них используется, не проще ли его переписать? (я ведь даже начинал это, и какой-то ощутимый кусок сделал)

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

И еще... Нужно ли тянуть заведомо устаревшие решения? Например, те же пулы, в пятерке почти такие же, но аллокация в них гарантировано за O(1). Всех изменений - по паре строчек в конструкторе, alloc и release.

Зависит от конкретного случая - в данном случае стоит поправить. Обычно, я делаю такие фиксы опциональными при помощи макроса - и для наглядности, и чтобы была возможность собрать наиболее приближенный к оригиналу вариант (к примеру, см. _USE_WIDESCREEN_FIX).

#7 Re: Программы для GTA » [SA|WIP] X-GTASA » 02-07-2015 14:20

Вот минимальный third-party для сборки проекта. Напомню, что в репо он не входит (RW - по понятным причинам, а DirectX SDK лучше скачать с сайта Microsoft со вчеми сопутствующими утилитами).

#8 Программы для GTA » [SA|WIP] X-GTASA » 01-07-2015 20:09

Lego
Replies: 11

x-gtasa.png

Сап, форум.

Представляю 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, пиши в тему или в личку - выдадим права на запись.

Скрины для привлечения внимания

x-gtasa_001s.jpg x-gtasa_002s.jpg x-gtasa_003s.jpg

Сборка и отладка проекта
  1. Необходима Visual Studio 2013 (кроме того, удобно, что в ней доступен git, но разумеется, можно использовать и другой клиент). Сборка происходит с toolset'ом v120_xp.

  2. В проект не входит RenderWare SDK 3.7 (вообще, необходим, как минимум, 3.5+) и Direct X SDK, которые необходимы для сборки (подробнее про пути third-party читать в readme.txt). Для сборки с RW D3D8 нужен Direct X 8 SDK; OpenGL билды на данный момент не поддерживаются.

  3. Для запуска приложения необходимы ресурсы от PC-версии (для D3D8/OpenGL-билдов необходима пересборка ресурсов (варианты подключения ресурсов приведены в readme).

  4. Стабильная ветка для сборки – master. Debug/Metrics-билды имеют консоль (~) и вывод дополнительной отладочной информации.

  5. По поводу __DUMMY(), а также именования методов, полей классов и глобальных переменных подробнее расписано в readme.txt.

  6. Следует обратить внимание, что Final (Release)-билды используют /MT вместо /MD.

#9 Re: Серия GTA » Grand Theft Auto V » 16-04-2015 00:52

VcSaJen wrote:

listener во времена GTA4 выкладывал реверсированные исходники основных классов и шаблоны для 010 для архивов и текстур. Надеюсь, когда-нибудь в будущем он выложит что-то подобное. Время OpenLosSantos!

ну текстуры не так уж далеко шагнули (да и что с ними будет, вообщем-то). во всяком случае, когда я в конце 2013-го смотрел PS3-версию, отличия от GTA4 были минимальны.
больше интересны его пояснения о работы движка в общем плане.

НикИТОС wrote:
VcSaJen wrote:

Время OpenLosSantos!

Кстати об Опен. Когда-то видел на паблике сорцы с подстрокой OpenGTA то ли в название, то ли в коде. Сейчас не нашёл. Видимо, пропали после падения паблика в даун без бэкапов. Кто-нибудь расскажет, что это был за проект? smile

это gta_dll, насколько мне известно, эта штука далее не развивается.
вообще, если интересно, есть неанонсированный проект, который является логическим продолжением open san andreas.

#10 Re: Серия GTA » Grand Theft Auto V » 15-04-2015 20:20

Seemann wrote:

Гуд выложил скрины тут
http://gtaforums.com/topic/388289-rel-o … 1067317821

Технические детали шифрования подробно могут рассказать Alexander и listener, если захотят)

Напоминает сталкер, там файлы каждого следующего архива gamedata перегружали предыдущий. Интересно, можно ли тут аналогично делать патчи?

Seemann wrote:

Если на видеокарте меньше 2G памяти, можно не пытаться запускать

Сам не ставил, но на GTX 650 1Gb попробовал - вполне играбельно. Вообще, я ожидал гораздо более плохой оптимизации.

ThirteenAG wrote:

А будет что-нибудь подобное xliveless?

так ведь нету же live ?

#11 Re: Справочная информация » Адреса и функции gta_sa.exe 1.0 » 27-02-2015 15:51

сгенерировал иерархию виртуальных классов для GTA San Andreas POL 1.01 на основе RTTI
http://gta.nick7.com/stuff/gtasa/pc-classes.html

возможно, окажется полезным

#12 Re: Программы для GTA » Проблема с .asi файлами » 15-01-2015 09:01

shumila wrote:

Есть ли alice или как там я про lua язык для san andreas просто в mta поиграл и хочу некоторорые скрипт перенести  в gta sa допустим скрипт шторм ну тоесть админ пишит в админке 100 и вода по земле летает кулльно бы

на вот тебе, у тебя закончились: ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

#13 Re: Работа с памятью, EXE » ФункцииSA EXE 1.0 » 19-12-2014 22:13

чтобы не создавать тему, напишу сюда.

у кого-нибудь есть есть немецкий gta_sa.exe ? знаю, что он, практически, не отличается от обычного US, но всё же.

ну и вообще, если есть какой-нибудь "особый" .exe, то за ссылочку буду весьма признателен.

#14 Re: О сайте и форумах » Изменения на форумах » 25-03-2014 10:14

sannybuilder.com-forums.png

Из-за вертикальной прокрутки не видно пары пикселей в самом низу, в итоге не видно символов "_" или "." .
Браузер - Chromium 35.0. В Nightly (последний огнелис), кстати, всё нормально.

Навскидку могу предложить "грязный" фикс:

.syntaxhighlighter {
     padding-bottom: 1px !important;
}

Кстати, если в теге [code] указать несуществующий язык, то страница будет выдавать алерт. Если это дебаг, то лучше исправить на console.error или что-нибудь типа того.

#15 Re: Серия GTA » GTA: San Andreas Mobile » 23-01-2014 19:39

новые строки в GXT:
http://gta.nick7.com/stuff/gxt/sa-mobil … an-new.txt
http://gta.nick7.com/stuff/gxt/sa-mobil … an-new.txt

осталось несколько хэшей, я не могу найти к ним ключи (пробовал брутом, но какая из коллизий нужна - я не знаю)

#16 Re: Серия GTA » GTA: San Andreas Mobile » 15-01-2014 05:38

вброшу, кое-какие исходники от 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;
}

спрашивайте, если что-то интересует.

#17 Re: Серия GTA » GTA: San Andreas Mobile » 29-12-2013 17:48

на компе это не актуально, так как там есть txd.

и дело не в RtPNG, а в TextureDatabaseEntry - он имеет метод для загрузки текстуры из PNG вместо DAT:

TextureDatabase::GetPNGFilename(char *,char  const*)
TextureDatabaseEntry::LoadPNG(char  const*)

идея понятна - возиться с огромным тройным кэшэм не очень удобно. скорее всего, кэш был собран из png-файлов перед релизом, а сами разработчики работали с png.

#18 Re: Серия GTA » GTA: San Andreas Mobile » 29-12-2013 16:55

Интересно, что VC и SA поддерживают загрузку текстур напрямую из PNG минуя кэш.
В принципе, можно попробовать разблокировать эту фичу, но это по-любому серьёзно повлияет на производительность.

#19 Re: Справочная информация » Адреса и функции gta_vc.exe 1.0 » 16-12-2013 10:29

годнота.

теперь толпа школьников будет негодовать почему почти все клео-моды не идут на SA.

надо написать по-тупому, красными буквами, что они НЕ совместимы и ДОЛЖНЫ быть переписаны.

#20 Re: Серия GTA » GTA: San Andreas Mobile » 14-12-2013 17:03

Будет ли обновление SB? Или все ждут андроид версию на следующей неделе?

думаю, лучше подождать. я сам планирую выпустить TXDFucker после выхода под андроид.


чё-то я с трудом втыкаю в gta3sa, может, iOS-файлы нужно загружать как-то по-особому?

глянул по диагонали, нашёл пару интересующих меня функций, но толком так и не понял как тут сделаны виртуальные таблицы, и почему большая часть строк не имеет xref.

#21 Re: Вопросы по скриптингу » Один вопрос » 10-11-2013 15:23

чисто в плане логики - зачем выгружать звук и тут же его загружать?

алсо, насколько я помню скриптинг в СА, то ты создал поток и тут же начал его выполнять в создающем потоке, то есть выполняешь свой скрипт одновременно дважды.

#22 Re: Работа с памятью, EXE » GTA V PPC executable » 07-11-2013 19:08

@Alien - для того, чтобы получить ELF из BIN (и не только) есть набор консольных утилит с интерфейсом "PKG Toolkit GUI".
также, для PS3 вот здесь есть набор скриптов, с которых можно (нужно) начать. кроме того, стоит поискать раздачу с PS3 SDK (рекомендую 3.70).

по иксбоксу - для распаковки юзается xextool (вроде, на сайте дагерона была инфа по теме)

#23 Re: Работа с памятью, EXE » GTA V PPC executable » 06-11-2013 10:43

не пойму, нужен именно сам BIN / ELF? (тогда - лови PS3 .BIN)

так ведь нагуглить - не особо проблема же, есть пофайловые раздачи пятёрки.

в принципе, могу скинуть свою i64-базу по этому файлу, но наработок там пока не так уж много, плюс кое-где косяки.

Board footer

Powered by FluxBB