#1 26-11-2013 20:30

Sergey81
Registered: 19-12-2008
Posts: 654

GTA: San Andreas Mobile

Выходит уже в следующем месяце на iOS, Android и Windows Phone(хотя в оригинале написано mobile).
http://www.rockstargames.com/newswire/a … ember.html

Ждем новые части исходников и именованные функции? smile

Offline

#2 26-11-2013 22:09

Seemann
Registered: 07-08-2006
Posts: 2,156

Re: GTA: San Andreas Mobile

недавно как раз задумывался о том, будет ли саня на мобильниках. вышла даже раньше.
было бы интересно посмотреть, что там под капотом) хотя на сегодняшний момент - San Andreas наиболее изученная игра из всей серии, возможно только более корректные имена опкодов пригодятся

Offline

#3 11-12-2013 20:07

Sergey81
Registered: 19-12-2008
Posts: 654

Re: GTA: San Andreas Mobile

Вышла на iOS в некоторых регионах. Каковы шансы, что можно будет работать с памятью через SCM, как в пк версии?

UPD. main.scm ios версии - http://www.sendspace.com/file/hfffbi
Sanny Builder крашится при открытии.

Last edited by Sergey81 (11-12-2013 21:00)

Offline

#4 13-12-2013 02:16

Alexander
Registered: 19-08-2006
Posts: 184
Website

Re: GTA: San Andreas Mobile

Из iOS версии не полностью убрали скриптовый дебуг , в файле опкоды с именами . Добавлено около 50-ти новых для работы с тачем , стыкуются в притык к CLEO опкодам .

Offline

#5 13-12-2013 07:03

Sergey81
Registered: 19-12-2008
Posts: 654

Re: GTA: San Andreas Mobile

>I'm going to create a simple decompiler because Sanny cannot decompile some of them in any way.
http://gtaforums.com/topic/661408-gta-s … 1064279085

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

Offline

#6 13-12-2013 15:46

Seemann
Registered: 07-08-2006
Posts: 2,156

Re: GTA: San Andreas Mobile

@Sergey81 - обновление SB будет, узнал о выходе только сегодня)

Edit:
дизассемблированный MAIN.SCM
http://sannybuilder.com/dev/GTASA_IOS_SCM.rar

Last edited by Seemann (13-12-2013 17:52)

Offline

#7 14-12-2013 17:03

Lego
Registered: 18-08-2009
Posts: 24
Website

Re: GTA: San Andreas Mobile

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

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


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

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

Last edited by Lego (14-12-2013 17:16)

Offline

#8 14-12-2013 19:20

Sergey81
Registered: 19-12-2008
Posts: 654

Re: GTA: San Andreas Mobile

@Lego - Чтобы было больше xrefs, нужно дизассемблировать в 6.4 демо, я когда лаунчер на iOS делал, IDA 6.1 не показывала xrefs для "movies\\Logo.mpg.mp4"(или как-то так), а в 6.4 они были.

Offline

#9 29-12-2013 16:55

Lego
Registered: 18-08-2009
Posts: 24
Website

Re: GTA: San Andreas Mobile

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

Offline

#10 29-12-2013 17:30

DK22Pac
From: Ukraine
Registered: 26-03-2010
Posts: 447
Website

Re: GTA: San Andreas Mobile

В SA PC тоже есть RtPNG. Разве что для текстур интерфейса использовать.

Last edited by DK22Pac (29-12-2013 17:30)


Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv

Offline

#11 29-12-2013 17:48

Lego
Registered: 18-08-2009
Posts: 24
Website

Re: GTA: San Andreas Mobile

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

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

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

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

Last edited by Lego (29-12-2013 17:50)

Offline

#12 29-12-2013 18:23

DK22Pac
From: Ukraine
Registered: 26-03-2010
Posts: 447
Website

Re: GTA: San Andreas Mobile

Понятно, я подумал, что речь о "разблокировке" на пк.


Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv

Offline

#13 15-01-2014 05:38

Lego
Registered: 18-08-2009
Posts: 24
Website

Re: GTA: San Andreas Mobile

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

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

Last edited by Lego (15-01-2014 06:04)

Offline

#14 23-01-2014 19:39

Lego
Registered: 18-08-2009
Posts: 24
Website

Re: GTA: San Andreas Mobile

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

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

Last edited by Lego (23-01-2014 19:42)

Offline

#15 17-03-2014 16:43

amshegarh
Registered: 17-03-2014
Posts: 1

Re: GTA: San Andreas Mobile

Доброго дня, хочу написать про версию sa на windows 8, которая в metro, она в принципе от wp8 не отличается, только платформой, так вот, на нее cleo возможно поставить?

Offline

Board footer

Powered by FluxBB