Code:
OFF_players = 0x0075C38,
OFF_gametype = 0x13C3118,
OFF_cur_player = 0x13AAD40,
OFF_iszoomed = 0x13C2BEC,
OFF_flip = 0x19620,
OFF_intel_carrier = 0x13C2E24,
OFF_xres = 0x7F224,
OFF_yres = 0x7FAEC,
Code:
enum weap_t {
spade = 0,
block,
gun,
grenade
};
enum gun_t {
rifle = 0,
smg,
shotgun
};
class CPlayer
{
public:
char _0x0000[672];
vec3f Position; //0x02A0
vec3f Position2; //0x02AC
char _0x02B8[12];
vec3f right; //0x02C4
vec3f up; //0x02D0
vec3f fwd; //0x02DC
__int32 team; //0x02E8
gun_t typegun; //0x02EC
__int32 move_forward; //0x02F0
__int32 move_backward; //0x02F4
__int32 move_left; //0x02F8
__int32 move_right; //0x02FC
__int32 jumping; //0x300
__int32 ducking; //0x0304
__int32 aiming; //0x0308
char _0x030C[4];
weap_t weapon; //0x0310
DWORD color; //0x0314
__int32 alive; //0x0318
__int32 joined; //0x031C
char _0x0320[8];
__int32 score; //0x0328
__int32 blocks; //0x032C
__int32 ammo_loaded; //0x0330
__int32 ammo_spare; //0x0334
__int32 grenades; //0x0338
__int32 health; //0x033C
char _0x0340[12];
float reloading; //0x034C
char _0x0350[64];
char name[16]; //0x0390
};//Size=0x03A0
since i havent heard anyone, can i conclude that i am the first to update my hack to .61?
edit: blegh, what are those ads in my post
not related to aimbots and all, but here is all contents of the language file.
the first number is the index, the second defines the formatting (how arguments are used)
Code:
1: no substitution
2: %s
3: %s %s
4: %i
6: %i %i %i
7: %i %s
8: %s %i
9: %u
function at client + 0x25DE0 loads a language string.
Code:
Lang(00:1): 'Advertise on master server? (y/n):\n'
Lang(01:1): ' (Block)'
Lang(02:1): 'Blue'
Lang(03:3): '%s killed %s'
Lang(04:3): '%s has captured the %s Intel.'
Lang(05:3): '%s has captured %s'
Lang(06:2): '%s changed team'
Lang(07:1): 'Global Chat:'
Lang(08:1): 'Team Chat:'
Lang(09:9): 'Client Checksum: %u\n'
Lang(10:1): 'Color Select: ARROWS Color Sample: R.MOUSE'
Lang(11:1): 'Connecting to Master Game Server\n'
Lang(12:1): 'Default Controls...'
Lang(13:1): 'Could not open client for version checks\n'
Lang(14:1): 'Could not open current executable'
Lang(15:1): '\nDisconnected from Master Server\n'
Lang(16:1): 'Done!\nIf you're disconnected from the master server, check port settings, disable extra network devices, and check for game updates\n'
Lang(17:1): 'Downloading Map (Esc to Quit)'
Lang(18:3): '%s has dropped the %s Intel.'
Lang(19:1): 'Error: Visit ace-spades.com to join games or try a different server'
Lang(20:1): 'Error connecting to master server...\n'
Lang(21:1): 'Error creating server\n'
Lang(22:1): '\nError loading map\n'
Lang(23:1): 'Error sending server info!\n'
Lang(24:2): '%s fell too far'
Lang(25:6): '\nFog set to %i %i %i\n'
Lang(26:1): 'Generating Map...\n'
Lang(27:1): 'Green'
Lang(28:1): ' (Grenade)'
Lang(29:3): '%s has the %s Intel.'
Lang(30:1): 'You have admin rights: /help for commands'
Lang(31:1): 'Change Team: COMMA Change Weapon: PERIOD'
Lang(32:1): 'Movement: W,S,A,D Jump: SPACE Crouch: CTRL'
Lang(33:1): 'Reload: R Scores: TAB Allchat: T Teamchat: Y'
Lang(34:1): 'Type 'gen' to generate a map or mapname to load a map (exclude .vxl extension)\n'
Lang(35:1): 'Walk: SHIFT Fire: L.MOUSE Gunsight: R.MOUSE'
Lang(36:1): 'Weapons: 1-5 or MOUSEWHEEL Map: M Quit: ESC'
Lang(37:1): '\nInvalid command\n'
Lang(38:1): 'invalid game file'
Lang(39:1): '\nInvalid path\n'
Lang(40:2): '\n%s made admin\n'
Lang(41:3): '%s joined the %s team.'
Lang(42:2): '%s kicked'
Lang(43:1): 'Loading Map...'
Lang(44:8): 'Loading %s in %i seconds'
Lang(45:1): 'MAP RESET'
Lang(46:1): 'Enter Max Players (between 1 and 32):\n'
Lang(47:4): 'Need %i more votes'
Lang(48:1): '\nNew map loaded\n'
Lang(49:1): 'Could not retrieve IP address\n'
Lang(50:1): 'REMEMBER TO OPEN/FORWARD UDP PORT 32887 ON YOUR ROUTER\n'
Lang(51:1): 'pause'
Lang(52:1): ' (Pickaxe)'
Lang(53:2): '%s banned'
Lang(54:7): '\nPlayer %i connected from %s\n'
Lang(55:2): '%s disconnected'
Lang(56:4): 'Player %i banned'
Lang(57:4): 'Player %i disconnected'
Lang(58:4): 'Player %i kicked'
Lang(59:2): 'Press 1 to join the %s Team'
Lang(60:1): 'Press 1 to select the Rifle'
Lang(61:2): 'Press 2 to join the %s Team'
Lang(62:1): 'Press 2 to select the SMG'
Lang(63:1): 'Press 3 to select the Shotgun'
Lang(64:1): 'Press Any Key to Continue'
Lang(65:1): 'Quit map transfer'
Lang(66:1): 'RELOAD'
Lang(67:1): ' (Rifle)'
Lang(68:1): 'Saved map as vxl/lastsav.vxl'
Lang(69:1): 'Sending server info\n'
Lang(70:1): 'Sent!\n'
Lang(71:1): 'Server Connection Failed: It's either full or misconfigured'
Lang(72:1): 'Server disconnect or kick: also check latest game version'
Lang(73:1): 'Server Disconnect: timeout, quit, or version mismatch'
Lang(74:9): 'Server Link: AOS://%u\n'
Lang(75:1): 'Enter Server Name (A-Z, 0-9, max 31):\n'
Lang(76:1): 'Server Setup Finished!\n"kick #" to kick player #\n"ban #" to ban player #\n"admin #" to make player # admin\n"fog R G B" to set fog color\n"quit" to disconnect and quit\n'
Lang(77:1): 'Server Timeout: version mismatch or map transfer fail'
Lang(78:1): ' (Shotgun)'
Lang(79:2): '%s shuffled off this mortal coil'
Lang(80:1): ' (SMG)'
Lang(81:1): ' (Spade)'
Lang(82:3): '%s is capturing %s'
Lang(83:1): 'Started Server\n'
Lang(84:3): '%s switched to the %s team.'
Lang(85:2): '%s switched weapons'
Lang(86:2): '%s TEAM WINS!'
Lang(87:3): '%s teamkilled %s'
Lang(88:1): 'Could not uncompress map'
Lang(89:1): 'BLUE'
Lang(90:1): 'GREEN'
Lang(91:4): 'Volume: %i'
Lang(92:2): 'Votecast against %s Chat /y for yes'
Lang(93:1): 'Votecast Over'
Lang(94:1): 'The client must be in same directory as server\n'
Lang(95:2): 'You've been killed by %s'
Lang(96:2): 'You've killed %s'
Lang(97:1): 'YyNn'
code used to dump the lang strings (yes, it's a hacky 5 minute job, hardcoded path and no magic (STR0) checking)
Code:
char* mem_lang_buffer = 0;
bool LoadLangString( int num )
{
DWORD off = *(PDWORD)(mem_lang_buffer + 4 * num + 8);
DWORD dum = (off & 0xff000000) >> 6*4;
off &= 0xffffff;
if( dum < 0xA ) {
char* ret = (char *)mem_lang_buffer + off;
char* tmpstr = (char*)malloc( strlen(ret)*2 + 2 );
char* p = tmpstr;
while( *ret ) {
if( *ret == 0xa ) {
*(p++) = '\\';
*p = 'n';
} else {
*p = *ret;
}
p++;
ret++;
}
*p = 0;
printf( "Lang(%02i:%i): '%s'\n", num, dum, tmpstr );
free( tmpstr );
return true;
}
cout << "You are reading too far!" << endl;
return false;
}
int main()
{
FILE* f = fopen( "C:\\Ace of Spades\\Game\\languages\\AoSLang-EN.bin", "rb" );
fseek( f, 0, 2 );
long len = ftell( f );
rewind( f );
mem_lang_buffer = (char*)malloc( len );
fread( mem_lang_buffer, 1, len, f );
fclose( f );
for( int n = 0; true; n++ ) {
if( !LoadLangString( n ) ) break;
}
free( mem_lang_buffer );
cin.get();
}