From: Charles McGarvey Date: Mon, 8 Mar 2004 19:00:00 +0000 (-0700) Subject: The Cheat 1.1 X-Git-Tag: v1.1 X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fthecheat;a=commitdiff_plain;h=refs%2Ftags%2Fv1.1 The Cheat 1.1 New Features: - Update Check (query a server to determine current version). - Ability to specify how many hits you want The Cheat to show you. Bug Fixes: - String changing now changes the correct number of bytes. - Other minor bugs. Other Changes: - String searching is now optimized. - Default port changed from 5007 to 51835. - New icon. --- diff --git a/AboutBoxController.h b/AboutBoxController.h index 2b9901d..05f4e5d 100644 --- a/AboutBoxController.h +++ b/AboutBoxController.h @@ -14,6 +14,7 @@ @interface AboutBoxController : NSWindowController { IBOutlet NSWindow *aboutWindow; + IBOutlet NSTextField *nameVersionText; } - (IBAction)launchWebsiteButton:(id)sender; diff --git a/AboutBoxController.m b/AboutBoxController.m index 68e2c6d..e499ef8 100644 --- a/AboutBoxController.m +++ b/AboutBoxController.m @@ -12,6 +12,8 @@ #include "cheat_shared.h" +#import + @implementation AboutBoxController @@ -23,6 +25,7 @@ - (void)windowDidLoad { + [nameVersionText setStringValue:[NSString stringWithFormat:@"%@ %@", [CMUpdateCheck appName], [CMUpdateCheck appVersion]]]; [aboutWindow center]; } diff --git a/AppController.h b/AppController.h index efdce2a..db42eed 100644 --- a/AppController.h +++ b/AppController.h @@ -54,8 +54,11 @@ - (IBAction)showNetTrafficWindow:(id)sender; - (IBAction)launchHelpFile:(id)sender; +- (IBAction)launchEmailMenu:(id)sender; - (IBAction)launchWebsiteMenu:(id)sender; +- (IBAction)checkForUpdate:(id)sender; + - (NSArray *)serverList; @end \ No newline at end of file diff --git a/AppController.m b/AppController.m index 56e2696..aacc0a7 100644 --- a/AppController.m +++ b/AppController.m @@ -21,6 +21,8 @@ #import "ServerHolder.h" +#import + @implementation AppController @@ -36,16 +38,20 @@ [defaults setObject:[NSNumber numberWithBool:TCGlobalPlaySounds] forKey:TCPlaySoundsPref]; [defaults setObject:[NSNumber numberWithBool:TCGlobalWindowsOnTop] forKey:TCWindowsOnTopPref]; + [defaults setObject:[NSNumber numberWithBool:TCGlobalUpdateCheck] forKey:TCUpdateCheckPref]; [defaults setObject:[NSNumber numberWithBool:TCGlobalAllowRemote] forKey:TCAllowRemotePref]; [defaults setObject:[NSNumber numberWithInt:TCGlobalListenPort] forKey:TCListenPortPref]; [defaults setObject:[NSString stringWithFormat:@"%@'s Computer", NSFullUserName()] forKey:TCBroadcastNamePref]; + [defaults setObject:[NSNumber numberWithInt:TCGlobalHitsDisplayed] forKey:TCHitsDisplayedPref]; [[NSUserDefaults standardUserDefaults] registerDefaults:defaults]; - TCGlobalPlaySounds = [[NSUserDefaults standardUserDefaults] integerForKey:TCPlaySoundsPref]; - TCGlobalWindowsOnTop = [[NSUserDefaults standardUserDefaults] integerForKey:TCWindowsOnTopPref]; - TCGlobalListenPort = [[NSUserDefaults standardUserDefaults] integerForKey:TCListenPortPref]; + TCGlobalPlaySounds = [[NSUserDefaults standardUserDefaults] boolForKey:TCPlaySoundsPref]; + TCGlobalWindowsOnTop = [[NSUserDefaults standardUserDefaults] boolForKey:TCWindowsOnTopPref]; + TCGlobalUpdateCheck = [[NSUserDefaults standardUserDefaults] boolForKey:TCUpdateCheckPref]; TCGlobalAllowRemote = [[NSUserDefaults standardUserDefaults] boolForKey:TCAllowRemotePref]; + TCGlobalListenPort = [[NSUserDefaults standardUserDefaults] integerForKey:TCListenPortPref]; + TCGlobalHitsDisplayed = [[NSUserDefaults standardUserDefaults] integerForKey:TCHitsDisplayedPref]; } - (id)init @@ -54,8 +60,9 @@ { servers = [[NSMutableArray alloc] init]; + // start the server with saved settings [self listenOnPort:TCGlobalListenPort remote:TCGlobalAllowRemote]; - [self broadcastWithName:TCGlobalBroadcastName]; + if ( TCGlobalAllowRemote ) [self broadcastWithName:TCGlobalBroadcastName]; // set up the network browser browser = [[NSNetServiceBrowser alloc] init]; @@ -71,6 +78,15 @@ } +- (void)applicationDidFinishLaunching:(NSNotification *)aNotification +{ + if ( TCGlobalUpdateCheck ) + { + [CMUpdateCheck checkWithURL:@"http://www.brokenzipper.com/software.plist" verbose:NO]; + } +} + + - (void)listenOnPort:(int)port remote:(BOOL)remote { if ( connection ) @@ -101,14 +117,11 @@ - (void)broadcastWithName:(NSString *)name { - if ( TCGlobalAllowRemote ) - { - [self stopBroadcast]; + [self stopBroadcast]; - service = [[NSNetService alloc] initWithDomain:@"local." type:@"_cheat._tcp." name:name port:TCGlobalListenPort]; - [service setDelegate:self]; - [service publish]; - } + service = [[NSNetService alloc] initWithDomain:@"local." type:@"_cheat._tcp." name:name port:TCGlobalListenPort]; + [service setDelegate:self]; + [service publish]; } - (void)stopBroadcast @@ -151,7 +164,12 @@ - (IBAction)launchHelpFile:(id)sender { //[[NSWorkspace sharedWorkspace] openFile:[[NSBundle mainBundle] pathForResource:@"Read Me" ofType:@"html"] withApplication:@"Safari"]; - [[NSWorkspace sharedWorkspace] openURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Read Me" ofType:@"pdf"]]]; + [[NSWorkspace sharedWorkspace] openURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Read Me" ofType:@"rtf"]]]; +} + +- (IBAction)launchEmailMenu:(id)sender +{ + LaunchEmail(); } - (IBAction)launchWebsiteMenu:(id)sender @@ -160,6 +178,12 @@ } +- (IBAction)checkForUpdate:(id)sender +{ + [CMUpdateCheck checkWithURL:@"http://www.brokenzipper.com/software.plist"]; +} + + - (NSArray *)serverList { return serverList; @@ -187,6 +211,38 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ +- (void)preferenceSetWindowsOnTop:(BOOL)windowsOnTop +{ + if ( TCGlobalWindowsOnTop != windowsOnTop ) + { + [[NSNotificationCenter defaultCenter] postNotificationName:@"TCWindowsOnTopChanged" object:nil]; + } +} + +- (void)preferenceSetAllowRemote:(BOOL)allow listenPort:(int)port broadcastName:(NSString *)name +{ + if ( TCGlobalAllowRemote != allow || TCGlobalListenPort != port ) + { + [self listenOnPort:port remote:allow]; + } + if ( allow ) + { + if ( !TCGlobalAllowRemote || ![TCGlobalBroadcastName isEqualToString:name] ) + { + [self broadcastWithName:name]; + } + } + else + { + [self stopBroadcast]; + } + [netTrafficController serverSetAllowRemote:allow listenPort:port broadcastName:name]; + //[netTrafficController allowRemoteChanged:allow]; + //[netTrafficController listenPortChanged:port]; + //[netTrafficController broadcastNameChanged:name]; +} + +/* - (void)preferenceAllowRemoteChanged:(BOOL)allow { [self listenOnPort:TCGlobalListenPort remote:allow]; @@ -217,6 +273,7 @@ [netTrafficController broadcastNameChanged:name]; } +*/ /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -379,7 +436,7 @@ if ( [[errorDict objectForKey:@"NSNetServicesErrorCode"] intValue] == NSNetServicesCollisionError ) { - [self broadcastWithName:[NSString stringWithFormat:@"%@ %i", TCGlobalBroadcastName, TCGlobalAlternateBroadcastNameCount++]]; + [self broadcastWithName:[NSString stringWithFormat:@"%@ %i", [sender name], TCGlobalAlternateBroadcastNameCount++]]; } else { diff --git a/CheatServer.h b/CheatServer.h index e313dbf..ad0c12a 100644 --- a/CheatServer.h +++ b/CheatServer.h @@ -41,6 +41,7 @@ NSMutableArray *searchResults; NSMutableArray *searchResultsUndone; + int maxSearchResultsAmount; } + (NSConnection *)serverWithDelegate:(id)delegate socket:(int)sock; diff --git a/CheatServer.m b/CheatServer.m index 4feaa26..dd1c868 100644 --- a/CheatServer.m +++ b/CheatServer.m @@ -12,7 +12,8 @@ #import "SearchResults.h" -#include "chaz.h" +// for comparing floats +#import #include #include @@ -20,6 +21,7 @@ // Internal Functions +int bmsearch( char *pat, int m, char *text, int n, void *base, void *loc[] ); //BOOL inline compare_float( float a, float b ); //BOOL inline compare_double( double a, double b ); @@ -276,8 +278,6 @@ TCaddress *results = NULL; int resultsAmount = 0; - NSLog( @"string search: %s", value ); - for (;;) { if ( (result = vm_region( processTask, &address, &size, VM_REGION_BASIC_INFO, (vm_region_info_t)(&info), &infoCnt, &object_name )) != KERN_SUCCESS ) @@ -303,7 +303,7 @@ if ( result == KERN_SUCCESS ) { - int i, top = dataLength - vsize; + //int i, top = dataLength - vsize; if ( (results = realloc( results, TCAddressSize*resultsAmount + dataLength )) == NULL ) { @@ -311,13 +311,17 @@ exit(0); } - for ( i = 0; i < top; i++ ) + resultsAmount += bmsearch( (char *)value, vsize, (char *)data, dataLength, (void *)address, (void **)((char *)results+TCAddressSize*resultsAmount) ); + //resultsAmount += TBM( (char *)value, vsize, data, dataLength, (void **)((char *)results+TCAddressSize*resultsAmount) ); + //resultsAmount += SMITH( data, dataLength, (char *)value, vsize, (void **)((char *)results+TCAddressSize*resultsAmount) ); + + /*for ( i = 0; i < top; i++ ) { if ( strncmp( value, data+i, vsize ) == 0 ) { results[resultsAmount++] = (TCaddress)address + i; } - } + }*/ } free( data ); @@ -524,7 +528,7 @@ data = (int32_t *)malloc( size ); dataLength = size; - NSLog( @"address: %.8X size: %i", address, size ); + //NSLog( @"address: %.8X size: %i", address, size ); if ( (result = vm_read_overwrite( processTask, address, size, (vm_address_t)data, &dataLength )) != KERN_SUCCESS && result != KERN_PROTECTION_FAILURE ) { @@ -542,7 +546,7 @@ NSLog( @"ERROR: could not expand buffer" ); exit(0); } - + for ( i = 0; i < top; i++ ) { if ( *(data+i) == value ) @@ -564,7 +568,6 @@ NSLog( @"found %i of %i", resultsAmount, value ); } - - (void)firstSearchDecimalFloat:(float)value { kern_return_t result; @@ -616,7 +619,7 @@ for ( i = 0; i < top; i++ ) { - if ( cl_compare_float_eps( *(data+i), value, 0.1f ) == 0 ) + if ( CMCompareFloatsWithEpsilon( *(data+i), value, 0.1f ) == 0 ) { results[resultsAmount++] = (TCaddress)address + i * sizeof(value); } @@ -688,7 +691,7 @@ for ( i = 0; i < top; i++ ) { - if ( cl_compare_double_eps( *(data+i), value, 0.1 ) == 0 ) + if ( CMCompareDoublesWithEpsilon( *(data+i), value, 0.1 ) == 0 ) { results[resultsAmount++] = (TCaddress)address + i * sizeof(value); } @@ -712,7 +715,7 @@ { kern_return_t result; - int8_t data; + char *data; vm_size_t dataLength; TCaddress *results; @@ -728,11 +731,20 @@ return; } + if ( (data = (char *)malloc( vsize )) == NULL ) + { + NSLog( @"ERROR: could not create buffer" ); + + [self sendError:@"The server cancelled the search because it ran out of memory." fatal:NO]; + return; + } + if ( (results = (TCaddress *)malloc( TCAddressSize*lastResultsAmount )) == NULL ) { NSLog( @"ERROR: could not create buffer" ); [self sendError:@"The server cancelled the search because it ran out of memory." fatal:NO]; + free( data ); return; } @@ -740,11 +752,11 @@ { TCaddress address = lastResultsData[i]; - dataLength = sizeof(data); + //dataLength = sizeof(data); - if ( (result = vm_read_overwrite( processTask, address, sizeof(data), (vm_address_t)(&data), &dataLength )) == KERN_SUCCESS ) + if ( (result = vm_read_overwrite( processTask, address, vsize, (vm_address_t)(data), &dataLength )) == KERN_SUCCESS ) { - if ( data == value[0] ) + if ( memcmp( data, value, dataLength ) == 0 ) { results[resultsAmount++] = address; } @@ -762,6 +774,8 @@ realloc( results, TCAddressSize*resultsAmount ); [searchResults addObject:[SearchResults resultsWithType:TYPE_INTEGER size:SIZE_8_BIT data:results amount:resultsAmount]]; + free( data ); + NSLog( @"found %i of %i", resultsAmount, value ); } @@ -972,7 +986,7 @@ if ( (result = vm_read_overwrite( processTask, address, sizeof(data), (vm_address_t)(&data), &dataLength )) == KERN_SUCCESS ) { - if ( cl_compare_float_eps( data, value, 0.1f ) == 0 ) + if ( CMCompareFloatsWithEpsilon( data, value, 0.1f ) == 0 ) { results[resultsAmount++] = address; } @@ -1029,7 +1043,7 @@ if ( (result = vm_read_overwrite( processTask, address, sizeof(data), (vm_address_t)(&data), &dataLength )) == KERN_SUCCESS ) { - if ( cl_compare_double_eps( data, value, 0.1 ) == 0 ) + if ( CMCompareDoublesWithEpsilon( data, value, 0.1 ) == 0 ) { results[resultsAmount++] = address; } @@ -1056,8 +1070,6 @@ int failCount = 0; int i; - NSLog( @"change string: %s", value ); - for ( i = 0; i < count; i++ ) { if ( vm_write( processTask, (vm_address_t)addresses[i], (vm_offset_t)value, vsize ) != KERN_SUCCESS ) @@ -1260,8 +1272,8 @@ header.checksum = RandomChecksum(); header.function = 7; - header.size = sizeof(amount) + TCAddressSize*amount; - // AMOUNT DATA + header.size = sizeof(amount) + sizeof(maxSearchResultsAmount) + TCAddressSize*maxSearchResultsAmount; + // AMOUNT MAX AMOUNT DATA lengthAfter = length = header.size + sizeof(header); @@ -1275,7 +1287,8 @@ COPY_TO_BUFFER( ptr, &header, sizeof(header) ); COPY_TO_BUFFER( ptr, &amount, sizeof(amount) ); - COPY_TO_BUFFER( ptr, data, TCAddressSize*amount ); + COPY_TO_BUFFER( ptr, &maxSearchResultsAmount, sizeof(maxSearchResultsAmount) ); + COPY_TO_BUFFER( ptr, data, TCAddressSize*maxSearchResultsAmount ); if ( SendBuffer( sockfd, buffer, &length ) == -1 || lengthAfter != length ) { @@ -1571,6 +1584,8 @@ COPY_FROM_BUFFER( &type, ptr, sizeof(type) ); COPY_FROM_BUFFER( &size, ptr, sizeof(size) ); + + COPY_FROM_BUFFER( &maxSearchResultsAmount, ptr, sizeof(maxSearchResultsAmount) ); if ( ![searchResults lastObject] ) { @@ -1582,7 +1597,7 @@ { case SIZE_8_BIT: { - [self firstSearchString8bit:ptr size:(dataSize - (ptr - data))]; + [self firstSearchString8bit:ptr size:(dataSize - (ptr - data) - 1)]; } break; } @@ -2053,6 +2068,27 @@ %%%%%%%%%%%%%%%%%%%%%% Internal Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +#define ASIZE 256 +int bmsearch( char *pat, int m, char *text, int n, void *base, void *loc[] ) +{ + int count = 0; + int i, j, k, skip[ASIZE]; + + if( m==0 ) return 0; + for( k=0; k=0 && text[i] == pat[j]; j-- ) i--; + if( j == (-1) ) + /* SAVE LOCATION */ + loc[count++] = (void *)( base+i+1 ); + //return( text+i+1 ); + } + return count; +} + /* BOOL compare_float( float a, float b ) { diff --git a/English.lproj/AboutBox.nib/classes.nib b/English.lproj/AboutBox.nib/classes.nib index c9c6005..a36e7e5 100644 --- a/English.lproj/AboutBox.nib/classes.nib +++ b/English.lproj/AboutBox.nib/classes.nib @@ -4,7 +4,7 @@ ACTIONS = {launchEmailButton = id; launchWebsiteButton = id; }; CLASS = AboutBoxController; LANGUAGE = ObjC; - OUTLETS = {aboutWindow = NSWindow; }; + OUTLETS = {aboutWindow = NSWindow; nameVersionText = NSTextField; }; SUPERCLASS = NSWindowController; }, {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; } diff --git a/English.lproj/AboutBox.nib/keyedobjects.nib b/English.lproj/AboutBox.nib/keyedobjects.nib index 732b2b1..ebc418d 100644 Binary files a/English.lproj/AboutBox.nib/keyedobjects.nib and b/English.lproj/AboutBox.nib/keyedobjects.nib differ diff --git a/English.lproj/AboutBox.nib/objects.nib b/English.lproj/AboutBox.nib/objects.nib index b781640..919dcdb 100644 Binary files a/English.lproj/AboutBox.nib/objects.nib and b/English.lproj/AboutBox.nib/objects.nib differ diff --git a/English.lproj/AboutBox~.nib/classes.nib b/English.lproj/AboutBox~.nib/classes.nib index c9c6005..a36e7e5 100644 --- a/English.lproj/AboutBox~.nib/classes.nib +++ b/English.lproj/AboutBox~.nib/classes.nib @@ -4,7 +4,7 @@ ACTIONS = {launchEmailButton = id; launchWebsiteButton = id; }; CLASS = AboutBoxController; LANGUAGE = ObjC; - OUTLETS = {aboutWindow = NSWindow; }; + OUTLETS = {aboutWindow = NSWindow; nameVersionText = NSTextField; }; SUPERCLASS = NSWindowController; }, {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; } diff --git a/English.lproj/AboutBox~.nib/keyedobjects.nib b/English.lproj/AboutBox~.nib/keyedobjects.nib index 732b2b1..784ed8c 100644 Binary files a/English.lproj/AboutBox~.nib/keyedobjects.nib and b/English.lproj/AboutBox~.nib/keyedobjects.nib differ diff --git a/English.lproj/AboutBox~.nib/objects.nib b/English.lproj/AboutBox~.nib/objects.nib index b781640..a5eb031 100644 Binary files a/English.lproj/AboutBox~.nib/objects.nib and b/English.lproj/AboutBox~.nib/objects.nib differ diff --git a/English.lproj/InfoPlist.strings b/English.lproj/InfoPlist.strings index a002c0d..744ce1a 100644 Binary files a/English.lproj/InfoPlist.strings and b/English.lproj/InfoPlist.strings differ diff --git a/English.lproj/MainMenu.nib/classes.nib b/English.lproj/MainMenu.nib/classes.nib index dbb10e8..331fb3a 100644 --- a/English.lproj/MainMenu.nib/classes.nib +++ b/English.lproj/MainMenu.nib/classes.nib @@ -2,7 +2,8 @@ IBClasses = ( { ACTIONS = { - launchDebugEmailMenu = id; + checkForUpdate = id; + launchEmailMenu = id; launchHelpFile = id; launchWebsiteMenu = id; showAboutBoxWindow = id; diff --git a/English.lproj/MainMenu.nib/info.nib b/English.lproj/MainMenu.nib/info.nib index 5175839..acd81cf 100644 --- a/English.lproj/MainMenu.nib/info.nib +++ b/English.lproj/MainMenu.nib/info.nib @@ -7,7 +7,7 @@ IBEditorPositions 29 - 414 540 377 44 0 0 1280 1002 + 412 623 284 44 0 0 1280 1002 IBFramework Version 349.0 diff --git a/English.lproj/MainMenu.nib/keyedobjects.nib b/English.lproj/MainMenu.nib/keyedobjects.nib index 2a9c5c3..46a09cb 100644 Binary files a/English.lproj/MainMenu.nib/keyedobjects.nib and b/English.lproj/MainMenu.nib/keyedobjects.nib differ diff --git a/English.lproj/MainMenu.nib/objects.nib b/English.lproj/MainMenu.nib/objects.nib index ed061e9..bb4317d 100644 Binary files a/English.lproj/MainMenu.nib/objects.nib and b/English.lproj/MainMenu.nib/objects.nib differ diff --git a/English.lproj/MainMenu~.nib/classes.nib b/English.lproj/MainMenu~.nib/classes.nib index dbb10e8..df3e57d 100644 --- a/English.lproj/MainMenu~.nib/classes.nib +++ b/English.lproj/MainMenu~.nib/classes.nib @@ -2,7 +2,7 @@ IBClasses = ( { ACTIONS = { - launchDebugEmailMenu = id; + checkForUpdate = id; launchHelpFile = id; launchWebsiteMenu = id; showAboutBoxWindow = id; diff --git a/English.lproj/MainMenu~.nib/info.nib b/English.lproj/MainMenu~.nib/info.nib index d0ed50a..acd81cf 100644 --- a/English.lproj/MainMenu~.nib/info.nib +++ b/English.lproj/MainMenu~.nib/info.nib @@ -7,7 +7,7 @@ IBEditorPositions 29 - 414 540 377 44 0 0 1280 1002 + 412 623 284 44 0 0 1280 1002 IBFramework Version 349.0 @@ -16,6 +16,6 @@ 29 IBSystem Version - 7C107 + 7D24 diff --git a/English.lproj/MainMenu~.nib/keyedobjects.nib b/English.lproj/MainMenu~.nib/keyedobjects.nib index 87846a3..76e0352 100644 Binary files a/English.lproj/MainMenu~.nib/keyedobjects.nib and b/English.lproj/MainMenu~.nib/keyedobjects.nib differ diff --git a/English.lproj/MainMenu~.nib/objects.nib b/English.lproj/MainMenu~.nib/objects.nib index fe43dc5..b3ba7f2 100644 Binary files a/English.lproj/MainMenu~.nib/objects.nib and b/English.lproj/MainMenu~.nib/objects.nib differ diff --git a/English.lproj/MyDocument.nib/info.nib b/English.lproj/MyDocument.nib/info.nib index eacac03..6150a82 100644 --- a/English.lproj/MyDocument.nib/info.nib +++ b/English.lproj/MyDocument.nib/info.nib @@ -3,7 +3,7 @@ IBDocumentLocation - 466 67 356 406 0 0 1280 1002 + 114 -132 356 406 0 0 1280 1002 IBEditorPositions 143 diff --git a/English.lproj/MyDocument.nib/keyedobjects.nib b/English.lproj/MyDocument.nib/keyedobjects.nib index d02aa59..0e00406 100644 Binary files a/English.lproj/MyDocument.nib/keyedobjects.nib and b/English.lproj/MyDocument.nib/keyedobjects.nib differ diff --git a/English.lproj/MyDocument.nib/objects.nib b/English.lproj/MyDocument.nib/objects.nib index 7e23fc6..46427e8 100644 Binary files a/English.lproj/MyDocument.nib/objects.nib and b/English.lproj/MyDocument.nib/objects.nib differ diff --git a/English.lproj/MyDocument~.nib/info.nib b/English.lproj/MyDocument~.nib/info.nib index eacac03..de4f224 100644 --- a/English.lproj/MyDocument~.nib/info.nib +++ b/English.lproj/MyDocument~.nib/info.nib @@ -3,7 +3,7 @@ IBDocumentLocation - 466 67 356 406 0 0 1280 1002 + 114 -132 356 406 0 0 1280 1002 IBEditorPositions 143 @@ -24,9 +24,7 @@ IBFramework Version 349.0 IBLockedObjects - - 285 - + IBOldestOS 2 IBOpenObjects diff --git a/English.lproj/MyDocument~.nib/keyedobjects.nib b/English.lproj/MyDocument~.nib/keyedobjects.nib index 6a8ea78..0e00406 100644 Binary files a/English.lproj/MyDocument~.nib/keyedobjects.nib and b/English.lproj/MyDocument~.nib/keyedobjects.nib differ diff --git a/English.lproj/MyDocument~.nib/objects.nib b/English.lproj/MyDocument~.nib/objects.nib index d5b9063..46427e8 100644 Binary files a/English.lproj/MyDocument~.nib/objects.nib and b/English.lproj/MyDocument~.nib/objects.nib differ diff --git a/English.lproj/NetTraffic.nib/info.nib b/English.lproj/NetTraffic.nib/info.nib index 13785e2..851cbfb 100644 --- a/English.lproj/NetTraffic.nib/info.nib +++ b/English.lproj/NetTraffic.nib/info.nib @@ -17,6 +17,6 @@ 26 IBSystem Version - 7C107 + 7D24 diff --git a/English.lproj/NetTraffic.nib/keyedobjects.nib b/English.lproj/NetTraffic.nib/keyedobjects.nib index d48ead2..b6378b8 100644 Binary files a/English.lproj/NetTraffic.nib/keyedobjects.nib and b/English.lproj/NetTraffic.nib/keyedobjects.nib differ diff --git a/English.lproj/NetTraffic.nib/objects.nib b/English.lproj/NetTraffic.nib/objects.nib index d1e1825..2bebec5 100644 Binary files a/English.lproj/NetTraffic.nib/objects.nib and b/English.lproj/NetTraffic.nib/objects.nib differ diff --git a/English.lproj/NetTraffic~.nib/info.nib b/English.lproj/NetTraffic~.nib/info.nib index aecdb95..13785e2 100644 --- a/English.lproj/NetTraffic~.nib/info.nib +++ b/English.lproj/NetTraffic~.nib/info.nib @@ -11,7 +11,7 @@ 26 IBOldestOS - 1 + 2 IBOpenObjects 26 diff --git a/English.lproj/NetTraffic~.nib/keyedobjects.nib b/English.lproj/NetTraffic~.nib/keyedobjects.nib index ba73c95..d48ead2 100644 Binary files a/English.lproj/NetTraffic~.nib/keyedobjects.nib and b/English.lproj/NetTraffic~.nib/keyedobjects.nib differ diff --git a/English.lproj/NetTraffic~.nib/objects.nib b/English.lproj/NetTraffic~.nib/objects.nib index 0fcaf08..d1e1825 100644 Binary files a/English.lproj/NetTraffic~.nib/objects.nib and b/English.lproj/NetTraffic~.nib/objects.nib differ diff --git a/English.lproj/Preferences.nib/classes.nib b/English.lproj/Preferences.nib/classes.nib index d0ff1c9..ab06de0 100644 --- a/English.lproj/Preferences.nib/classes.nib +++ b/English.lproj/Preferences.nib/classes.nib @@ -2,22 +2,18 @@ IBClasses = ( {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, { - ACTIONS = { - allowRemoteButton = id; - broadcastNameTextField = id; - listenPortTextField = id; - playSoundsButton = id; - windowsOnTopButton = id; - }; + ACTIONS = {cancel = id; change = id; revert = id; save = id; }; CLASS = PreferenceController; LANGUAGE = ObjC; OUTLETS = { allowRemoteButton = id; broadcastNameTextField = id; delegate = id; + hitsDisplayedTextField = id; listenPortTextField = id; playSoundsButton = id; prefsWindow = id; + updateAutomaticallyButton = id; windowsOnTopButton = id; }; SUPERCLASS = NSWindowController; diff --git a/English.lproj/Preferences.nib/info.nib b/English.lproj/Preferences.nib/info.nib index dd873a5..efe0c6b 100644 --- a/English.lproj/Preferences.nib/info.nib +++ b/English.lproj/Preferences.nib/info.nib @@ -3,7 +3,7 @@ IBDocumentLocation - 299 131 356 240 0 0 1280 1002 + 214 102 356 240 0 0 1280 1002 IBFramework Version 349.0 IBLockedObjects @@ -15,6 +15,6 @@ 9 IBSystem Version - 7C107 + 7D24 diff --git a/English.lproj/Preferences.nib/keyedobjects.nib b/English.lproj/Preferences.nib/keyedobjects.nib index fd038bc..e686680 100644 Binary files a/English.lproj/Preferences.nib/keyedobjects.nib and b/English.lproj/Preferences.nib/keyedobjects.nib differ diff --git a/English.lproj/Preferences.nib/objects.nib b/English.lproj/Preferences.nib/objects.nib index 0d81752..0e8b2b7 100644 Binary files a/English.lproj/Preferences.nib/objects.nib and b/English.lproj/Preferences.nib/objects.nib differ diff --git a/English.lproj/Preferences~.nib/classes.nib b/English.lproj/Preferences~.nib/classes.nib index d0ff1c9..ab06de0 100644 --- a/English.lproj/Preferences~.nib/classes.nib +++ b/English.lproj/Preferences~.nib/classes.nib @@ -2,22 +2,18 @@ IBClasses = ( {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, { - ACTIONS = { - allowRemoteButton = id; - broadcastNameTextField = id; - listenPortTextField = id; - playSoundsButton = id; - windowsOnTopButton = id; - }; + ACTIONS = {cancel = id; change = id; revert = id; save = id; }; CLASS = PreferenceController; LANGUAGE = ObjC; OUTLETS = { allowRemoteButton = id; broadcastNameTextField = id; delegate = id; + hitsDisplayedTextField = id; listenPortTextField = id; playSoundsButton = id; prefsWindow = id; + updateAutomaticallyButton = id; windowsOnTopButton = id; }; SUPERCLASS = NSWindowController; diff --git a/English.lproj/Preferences~.nib/info.nib b/English.lproj/Preferences~.nib/info.nib index dd873a5..efe0c6b 100644 --- a/English.lproj/Preferences~.nib/info.nib +++ b/English.lproj/Preferences~.nib/info.nib @@ -3,7 +3,7 @@ IBDocumentLocation - 299 131 356 240 0 0 1280 1002 + 214 102 356 240 0 0 1280 1002 IBFramework Version 349.0 IBLockedObjects @@ -15,6 +15,6 @@ 9 IBSystem Version - 7C107 + 7D24 diff --git a/English.lproj/Preferences~.nib/keyedobjects.nib b/English.lproj/Preferences~.nib/keyedobjects.nib index 111873e..3e8692d 100644 Binary files a/English.lproj/Preferences~.nib/keyedobjects.nib and b/English.lproj/Preferences~.nib/keyedobjects.nib differ diff --git a/English.lproj/Preferences~.nib/objects.nib b/English.lproj/Preferences~.nib/objects.nib index 299cb1e..341389d 100644 Binary files a/English.lproj/Preferences~.nib/objects.nib and b/English.lproj/Preferences~.nib/objects.nib differ diff --git a/Info-The_Cheat__Upgraded_.plist b/Info-The_Cheat.plist similarity index 95% rename from Info-The_Cheat__Upgraded_.plist rename to Info-The_Cheat.plist index a29f41f..d7aef02 100644 --- a/Info-The_Cheat__Upgraded_.plist +++ b/Info-The_Cheat.plist @@ -18,7 +18,7 @@ CFBundleExecutable The Cheat CFBundleGetInfoString - The Cheat 1.0 + The Cheat 1.1 CFBundleIconFile icon.icns CFBundleIdentifier @@ -30,7 +30,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.0 + 1.1 CFBundleSignature ThCh NSMainNibFile diff --git a/MyDocument.h b/MyDocument.h index fcd29ae..352874e 100644 --- a/MyDocument.h +++ b/MyDocument.h @@ -43,6 +43,7 @@ TCaddress *searchResults; int searchResultsAmount; + int maxSearchResultsAmount; // to allow for connecting on new document BOOL everConnected; diff --git a/MyDocument.m b/MyDocument.m index 9e72f85..da58b81 100644 --- a/MyDocument.m +++ b/MyDocument.m @@ -259,6 +259,7 @@ void TCPlaySound( NSString *name ); [searchButton setEnabled:NO]; [clearSearchButton setEnabled:NO]; [self setStatusText:@"Not Connected" duration:0]; + [statusText setToolTip:@""]; [statusBar stopAnimation:self]; [addressTable setEnabled:NO]; [changeButton setTitle:@"Change..."]; @@ -282,6 +283,7 @@ void TCPlaySound( NSString *name ); [self updateSearchButton]; [clearSearchButton setEnabled:NO]; [self setStatusText:@"Connected" duration:0]; + [statusText setToolTip:@""]; [statusBar stopAnimation:self]; [addressTable setEnabled:NO]; [changeButton setTitle:@"Change..."]; @@ -304,7 +306,7 @@ void TCPlaySound( NSString *name ); [self updateSearchBoxes]; [self updateSearchButton]; [clearSearchButton setEnabled:YES]; - if ( searchResultsAmount < TCMaxSearchResults ) + if ( searchResultsAmount < maxSearchResultsAmount ) { if ( searchResultsAmount == 1 ) { @@ -318,10 +320,12 @@ void TCPlaySound( NSString *name ); { [self setStatusText:[NSString stringWithFormat:@"Results: %i", searchResultsAmount] duration:0]; } + [statusText setToolTip:@""]; } else { - [self setStatusText:[NSString stringWithFormat:@"Results: >%i", TCMaxSearchResults] duration:0]; + [self setStatusText:[NSString stringWithFormat:@"Results: >%i", maxSearchResultsAmount] duration:0]; + [statusText setToolTip:[NSString stringWithFormat:@"Results: %i", searchResultsAmount]]; } [statusBar stopAnimation:self]; [addressTable setEnabled:YES]; @@ -347,6 +351,7 @@ void TCPlaySound( NSString *name ); [searchButton setEnabled:NO]; [clearSearchButton setEnabled:NO]; [self setStatusText:@"Searching..." duration:0]; + [statusText setToolTip:@""]; [statusBar startAnimation:self]; [addressTable setEnabled:NO]; [changeButton setTitle:@"Change..."]; @@ -396,6 +401,7 @@ void TCPlaySound( NSString *name ); [searchButton setEnabled:NO]; [clearSearchButton setEnabled:NO]; [self setStatusText:@"Changing Later..." duration:0]; + [statusText setToolTip:@""]; [statusBar startAnimation:self]; [addressTable setEnabled:NO]; [changeButton setTitle:@"Cancel Change"]; @@ -420,6 +426,7 @@ void TCPlaySound( NSString *name ); [searchButton setEnabled:NO]; [clearSearchButton setEnabled:NO]; [self setStatusText:@"Repeating Change..." duration:0]; + [statusText setToolTip:@""]; [statusBar startAnimation:self]; [addressTable setEnabled:NO]; [changeButton setTitle:@"Stop Change"]; @@ -468,6 +475,7 @@ void TCPlaySound( NSString *name ); [searchButton setEnabled:NO]; [clearSearchButton setEnabled:NO]; [self setStatusText:@"Redoing..." duration:0]; + [statusText setToolTip:@""]; [statusBar startAnimation:self]; [addressTable setEnabled:NO]; [changeButton setTitle:@"Change..."]; @@ -853,10 +861,11 @@ void TCPlaySound( NSString *name ); [self destroyResults]; COPY_FROM_BUFFER( &searchResultsAmount, ptr, sizeof(searchResultsAmount) ); + COPY_FROM_BUFFER( &maxSearchResultsAmount, ptr, sizeof(maxSearchResultsAmount) ); if ( searchResultsAmount > 0 ) { - int memSize = TCAddressSize*searchResultsAmount; + int memSize = TCAddressSize*maxSearchResultsAmount; if ( (searchResults = (TCaddress *)malloc( memSize )) == NULL ) { @@ -985,7 +994,7 @@ void TCPlaySound( NSString *name ); TCsize size = [[sizePopup selectedItem] tag]; char *data, *ptr; - int dataSize = sizeof(type) + sizeof(size); + int dataSize = sizeof(type) + sizeof(size) + sizeof(TCGlobalHitsDisplayed); data = (char *)malloc( dataSize ); ptr = data; @@ -994,6 +1003,9 @@ void TCPlaySound( NSString *name ); COPY_TO_BUFFER( ptr, &type, sizeof(type) ); COPY_TO_BUFFER( ptr, &size, sizeof(size) ); + // copy the number of results to return. + COPY_TO_BUFFER( ptr, &TCGlobalHitsDisplayed, sizeof(TCGlobalHitsDisplayed) ); + NSLog( @"type: %i, size: %i", type, size ); // switch to cheating mode if this is the first search. @@ -1731,7 +1743,7 @@ void TCPlaySound( NSString *name ); - (int)numberOfRowsInTableView:(NSTableView *)table { - return (searchResultsAmount <= TCMaxSearchResults) ? searchResultsAmount : TCMaxSearchResults; + return (searchResultsAmount <= maxSearchResultsAmount) ? searchResultsAmount : maxSearchResultsAmount; } - (id)tableView:(NSTableView *)table objectValueForTableColumn:(NSTableColumn *)column row:(int)row diff --git a/NetTrafficController.h b/NetTrafficController.h index 092ffaf..fb7a116 100644 --- a/NetTrafficController.h +++ b/NetTrafficController.h @@ -32,9 +32,13 @@ - (void)initialInterfaceSetup; - (void)interfaceUpdate; +- (void)serverSetAllowRemote:(BOOL)allow listenPort:(int)port broadcastName:(NSString *)name; + +/* - (void)allowRemoteChanged:(BOOL)allow; - (void)listenPortChanged:(int)port; - (void)broadcastNameChanged:(NSString *)name; +*/ - (void)connectionListChanged; diff --git a/NetTrafficController.m b/NetTrafficController.m index 5649110..f57e02e 100644 --- a/NetTrafficController.m +++ b/NetTrafficController.m @@ -41,8 +41,9 @@ { //[netTrafficWindow setResizeIncrements:NSMakeSize( 1.0, 17.0 )]; - [self allowRemoteChanged:TCGlobalAllowRemote]; - [self listenPortChanged:TCGlobalListenPort]; + [self serverSetAllowRemote:TCGlobalAllowRemote listenPort:TCGlobalListenPort broadcastName:TCGlobalBroadcastName]; + //[self allowRemoteChanged:TCGlobalAllowRemote]; + //[self listenPortChanged:TCGlobalListenPort]; [self setConnectionCount:[delegate netTrafficConnectionCount]]; [serverListTable reloadData]; } @@ -71,6 +72,22 @@ } +- (void)serverSetAllowRemote:(BOOL)allow listenPort:(int)port broadcastName:(NSString *)name +{ + if ( allow ) + { + [listenPortText setStringValue:[NSString stringWithFormat:@"Listening on port %i.", port]]; + [broadcastNameText setStringValue:[NSString stringWithFormat:@"Broadcasting service as \"%@.\"", name]]; + } + else + { + [broadcastNameText setStringValue:@"Not accepting new connections from remote clients."]; + [listenPortText setStringValue:@"Listening for local connections only."]; + } +} + + +/* - (void)allowRemoteChanged:(BOOL)allow { if ( allow ) @@ -100,6 +117,7 @@ [broadcastNameText setStringValue:[NSString stringWithFormat:@"Broadcasting service as \"%@.\"", name]]; } } +*/ - (void)connectionListChanged diff --git a/PreferenceController.h b/PreferenceController.h index 681c5c8..aa185ad 100644 --- a/PreferenceController.h +++ b/PreferenceController.h @@ -22,9 +22,11 @@ IBOutlet id prefsWindow; IBOutlet id playSoundsButton; IBOutlet id windowsOnTopButton; + IBOutlet id updateAutomaticallyButton; IBOutlet id allowRemoteButton; IBOutlet id broadcastNameTextField; IBOutlet id listenPortTextField; + IBOutlet id hitsDisplayedTextField; } - (id)initWithDelegate:(id)del; @@ -32,10 +34,20 @@ - (void)initialInterfaceSetup; - (void)interfaceUpdate; +/* - (IBAction)playSoundsButton:(id)sender; - (IBAction)windowsOnTopButton:(id)sender; +- (IBAction)updateAutomaticallyButton:(id)sender; - (IBAction)allowRemoteButton:(id)sender; - (IBAction)listenPortTextField:(id)sender; - (IBAction)broadcastNameTextField:(id)sender; +- (IBAction)hitsDisplayedTextField:(id)sender; +*/ + +- (IBAction)change:(id)sender; + +- (IBAction)revert:(id)sender; +- (IBAction)cancel:(id)sender; +- (IBAction)save:(id)sender; @end \ No newline at end of file diff --git a/PreferenceController.m b/PreferenceController.m index fe178fb..4b60362 100644 --- a/PreferenceController.m +++ b/PreferenceController.m @@ -29,7 +29,6 @@ - (void)windowDidLoad { [self initialInterfaceSetup]; - [self interfaceUpdate]; } @@ -37,14 +36,18 @@ { [playSoundsButton setState:(TCGlobalPlaySounds)? NSOnState:NSOffState]; [windowsOnTopButton setState:(TCGlobalWindowsOnTop)? NSOnState:NSOffState]; + [updateAutomaticallyButton setState:(TCGlobalUpdateCheck)? NSOnState:NSOffState]; [allowRemoteButton setState:(TCGlobalAllowRemote)? NSOnState:NSOffState]; [listenPortTextField setIntValue:TCGlobalListenPort]; [broadcastNameTextField setStringValue:[[NSUserDefaults standardUserDefaults] objectForKey:TCBroadcastNamePref]]; + [hitsDisplayedTextField setIntValue:TCGlobalHitsDisplayed]; + + [self interfaceUpdate]; } - (void)interfaceUpdate { - if ( TCGlobalAllowRemote ) + if ( [allowRemoteButton state] ) { [listenPortTextField setEnabled:YES]; [broadcastNameTextField setEnabled:YES]; @@ -56,7 +59,7 @@ } } - +/* - (IBAction)playSoundsButton:(id)sender { if ( [playSoundsButton state] == NSOnState ) @@ -87,6 +90,20 @@ [[NSNotificationCenter defaultCenter] postNotificationName:@"TCWindowsOnTopChanged" object:nil]; } +- (IBAction)updateAutomaticallyButton:(id)sender +{ + if ( [updateAutomaticallyButton state] == NSOnState ) + { + TCGlobalUpdateCheck = YES; + [[NSUserDefaults standardUserDefaults] setBool:YES forKey:TCUpdateCheckPref]; + } + else + { + TCGlobalUpdateCheck = NO; + [[NSUserDefaults standardUserDefaults] setBool:NO forKey:TCUpdateCheckPref]; + } +} + - (IBAction)allowRemoteButton:(id)sender { if ( [allowRemoteButton state] == NSOnState ) @@ -123,5 +140,62 @@ [delegate preferenceBroadcastNameChanged:name]; } +- (IBAction)hitsDisplayedTextField:(id)sender +{ + TCGlobalHitsDisplayed = [hitsDisplayedTextField intValue]; + + [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInt:TCGlobalHitsDisplayed] forKey:TCHitsDisplayedPref]; +} +*/ + + +- (IBAction)change:(id)sender +{ + [self interfaceUpdate]; +} + + +- (IBAction)revert:(id)sender +{ + [self initialInterfaceSetup]; +} + +- (IBAction)cancel:(id)sender +{ + [self initialInterfaceSetup]; + [self close]; +} + +- (IBAction)save:(id)sender +{ + TCGlobalPlaySounds = [playSoundsButton state]; + [[NSUserDefaults standardUserDefaults] setBool:TCGlobalPlaySounds forKey:TCPlaySoundsPref]; + + // send window information to the delegate so the necessary adjustments can be made + [delegate preferenceSetWindowsOnTop:[windowsOnTopButton state]]; + + TCGlobalWindowsOnTop = [windowsOnTopButton state]; + [[NSUserDefaults standardUserDefaults] setBool:TCGlobalWindowsOnTop forKey:TCWindowsOnTopPref]; + + TCGlobalUpdateCheck = [updateAutomaticallyButton state]; + [[NSUserDefaults standardUserDefaults] setBool:TCGlobalUpdateCheck forKey:TCUpdateCheckPref]; + + // send server information to the delegate so the server can be updated accordingly + [delegate preferenceSetAllowRemote:[allowRemoteButton state] listenPort:[listenPortTextField intValue] broadcastName:[broadcastNameTextField stringValue]]; + + TCGlobalAllowRemote = [allowRemoteButton state]; + [[NSUserDefaults standardUserDefaults] setBool:TCGlobalAllowRemote forKey:TCAllowRemotePref]; + + TCGlobalListenPort = [listenPortTextField intValue]; + [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInt:TCGlobalListenPort] forKey:TCListenPortPref]; + + [[NSUserDefaults standardUserDefaults] setObject:[broadcastNameTextField stringValue] forKey:TCBroadcastNamePref]; + + TCGlobalHitsDisplayed = [hitsDisplayedTextField intValue]; + [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInt:TCGlobalHitsDisplayed] forKey:TCHitsDisplayedPref]; + + [self close]; +} + @end \ No newline at end of file diff --git a/PreferenceControlling.h b/PreferenceControlling.h index 1565412..dd31d18 100644 --- a/PreferenceControlling.h +++ b/PreferenceControlling.h @@ -13,8 +13,13 @@ @protocol PreferenceControlling +- (void)preferenceSetWindowsOnTop:(BOOL)windowsOnTop; +- (void)preferenceSetAllowRemote:(BOOL)allow listenPort:(int)port broadcastName:(NSString *)name; + +/* - (void)preferenceAllowRemoteChanged:(BOOL)allow; - (void)preferenceListenPortChanged:(int)port; - (void)preferenceBroadcastNameChanged:(NSString *)name; +*/ @end \ No newline at end of file diff --git a/Read Me.pdf b/Read Me.pdf deleted file mode 100644 index 0751b65..0000000 Binary files a/Read Me.pdf and /dev/null differ diff --git a/Read Me.rtf b/Read Me.rtf index 3c4fa61..e15a74e 100644 --- a/Read Me.rtf +++ b/Read Me.rtf @@ -1,73 +1,156 @@ {\rtf1\mac\ansicpg10000\cocoartf102 -{\fonttbl\f0\fnil\fcharset77 MarkerFelt-Wide;\f1\fnil\fcharset77 AmericanTypewriter;\f2\fnil\fcharset77 Zapfino; -\f3\fswiss\fcharset77 Helvetica;\f4\fswiss\fcharset77 Helvetica-Bold;} +{\fonttbl\f0\fswiss\fcharset77 Arial-BoldMT;\f1\fswiss\fcharset77 ArialMT;\f2\fswiss\fcharset77 Arial-ItalicMT; +\f3\fswiss\fcharset77 Helvetica;\f4\fnil\fcharset77 Monaco;} {\colortbl;\red255\green255\blue255;} -\margl1440\margr1440\vieww12440\viewh17240\viewkind1\viewscale100 -\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\qc +\margl1440\margr1440\vieww11440\viewh16000\viewkind0 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc -\f0\fs72 \cf0 The Cheat -\f1 -\fs28 v1.0 -\f2\fs72 \ -\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\qc +\f0\b\fs42 \cf0 The Cheat +\fs24 v1.1.1 +\fs42 \ -\f0\fs28 \cf0 by Chaz McGarvey\ +\fs24 Chaz McGarvey\ -\f3\fs36 December 19, 2003 -\fs28 \ -\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural +\f1\b0\fs32 March 8, 2004 +\f0\b\fs24 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qj -\f0 \cf0 \ +\fs42 \cf0 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qj + +\fs28 \cf0 What is The Cheat? +\f1\b0 \ +\ +The Cheat is an application referred to as a +\f2\i universal game trainer +\f1\i0 . It allows you to alter many different aspects of computer games. For example, you can change things like the amount of lives your character has, the amount of ammo, the level you're on, the abilities you have, your location in the game, and whatever else you want to change in your games. This all occurs in real-time while the game is running, and the process will work for almost any game. The Cheat contains the following features:\ +\ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\qj -\f4\b \cf0 Introduction -\f3\b0 \ +\f3 \cf0 - Includes support for finding strings, integers, and floats.\ +- Ability to pause the target application without switching programs.\ +- Browse and change possible variables from a list.\ +- Remote cheating lets you cheat games which won't give up full-screen.\ +- Ability to change variables continually, keeping a variable constant.\ +- Undo/redo works to revert to previous search results. +\f1 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qj +\cf0 \ + +\f0\b How does it work? +\f1\b0 \ \ -Remember those programs you used to have in the OS 9 days that let you trick most games into giving you extra lives or advance your level? Remember how Pandora's Box helped you beat Bill the Demon, or how Cheat II gave you the ammo you needed in Doom 2? Well, it's finally time to relive the memory.\ +Although the process has been used to cheat games for many years, it is relatively new to Mac OS X. Similar programs have been written for many platforms including Windows and many different game consoles. To do what it does, The Cheat accesses the memory of other applications. It first reads through the entire address space, searching for variables based on input you provide. Search results are then narrowed down by scanning the memory again after the value of the variable you are searching for has changed. After a few searches, there should only be one variable remaining (ideally). The Cheat will then allow you to change this variable to whatever you want. To learn more about using the program, refer to the tutorial which you should have received with the application.\ \ -OK, enough of the cheesy intro. The fact is, since the release of Mac OS X, there hasn't been a good general game cheater available. Until now. This is The Cheat, a general purpose cheater designed to help you get through those tough levels or just add some interesting possibilities to your games.\ + +\f0\b Is this safe? +\f1\b0 \ +\ +Mac OS X includes support for protected memory which disables running processes from accessing the address spaces of other processes and of the operating system. This causes a more stable system because faulty applications won't be able to trash the memory of other applications which could cause certain applications to crash or the entire operating system to crash. So since The Cheat is able to get around this protection, might this be bad for stability? Well, potentially yes. However, The Cheat only changes the memory of other programs where you tell it to. Thus, if you follow the process correctly, your games should never crash. Furthermore, assuming you don't run The Cheat as root (which would not be a good idea), The Cheat will not be able to alter any system-critical processes so it would actually be very difficult if not impossible to crash your system using The Cheat.\ +\ +That said, The Cheat does support a feature called remote cheating. This allows you to cheat programs running on one computer from another computer on the same network. This feature exists to allow programs which won't give up full-screen to be cheated. However, if there happens to be any malicious Mac OS X users on your network who also have The Cheat, they could potentially access the memory of your applications whenever remote cheating is enabled. This feature is off by default. It is recommended that you leave it off whenever you don't need its functionality.\ \ -\f4\b The Features -\f3\b0 \ +\f0\b So who writes this software? +\f1\b0 \ +\ +I do. If you need to contact me, my hours are 12 a.m. to 11:59:59 p.m. (yes, I need at least a second off) Monday through Saturday. Get ahold of me if you have questions about the software or if you have bugs to report. There are also resources on my web site (including discussion forums and source code for developers).\ +\ +Web: http://www.brokenzipper.com\ +Email: chaz@brokenzipper.com\ \ -\'a5 Includes support for finding strings, integers, and floats.\ -\'a5 Ability to pause the target application without switching programs.\ -\'a5 Browse and change possible variables from a list.\ -\'a5 Remote cheating lets you cheat games which won't give up full-screen.\ -\'a5 Ability to change variables continually, keeping a variable constant.\ -\'a5 Undo/redo works to revert to previous search results.\ +Be sure to have a nice disposition if you decide to contact me, and keep in mind that that this software is free.\ \ -\f4\b The Process -\f3\b0 \ +\f0\b Do you keep track of version history? +\f1\b0 \ +\ +Against my better judgment, yes. Here it is:\ \ -If you are new to game cheaters, knowing a little bit about how they work will help you use them properly (and safely). A variable is a component of a game which changes. Some examples of variables include the amount of lives, amount of ammo, current level, score, etc. All of a game's variables are stored somewhere in memory. Your job, as the cheater, is to find the location of a variable in memory and change its value to something more... appropriate. ;-)\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qj -\f4\b Safety Concerns -\f3\b0 \ +\f4\fs24 \cf0 1.1.1 (03/08/04, public)\ +Bug Fixes:\ +- String searches can now be narrowed down (sorry about that).\ +\ +1.1 (03/08/04, public)\ +New Features:\ +- Update Check (query a server to determine current version).\ +- Ability to specify how many hits you want The Cheat to show you.\ +Bug Fixes:\ +- String changing now changes the correct number of bytes.\ +- Other minor bugs.\ +Other Changes:\ +- String searching is now optimized.\ +- Default port changed from 5007 to 51835.\ +- New icon.\ \ -This software works by changing other applications' memory without them knowing. If not used properly, this can be a dangerous tool. In many instances, improper use can lead to the target application crashing (and possibly losing data), but that's not the worst case scenario. Fortunately, The Cheat is a very easy application to learn how to use, and problems rarely occur even among novices.\ +1.0 (12/19/03, public)\ +Bug Fixes:\ +\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\qj +\cf0 - User interface glitch disallowing continuous changes to be stopped.\ +- Other minor bugs.\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qj +\cf0 \ +1.0b4 (12/11/03, internal)\ +Bug Fixes:\ +\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\qj +\cf0 - The address table selection can now be changed during a continuous change.\ +- Stability issues relating to the network browser.\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qj +\cf0 - Server finder no longer displays servers on the local machine.\ +- Some crashes resolved.\ +Other Changes:\ +- Progress bar changed to the round variety.\ +- Information about searches is now provided for new users.\ +- Minor user interface improvements.\ \ -Security is also something to consider. There is a feature of The Cheat called remote cheating. This allows other computers on the network to connect to another computer remotely to execute cheating functions. While enabled, a very skilled hacker might have a chance at doing something nasty. Please note that this is extremely rare, and this feature is off by default. It is recommended that you always leave this feature off unless it's in use.\ +1.0b3 (11/26/03, internal)\ +New Features:\ +- Change values on a time interval to make variables seem constant.\ +- Informative about box added.\ +Bug Fixes:\ +- Searching implemented for all supported types.\ +- Changing values now works.\ +- Searching/changing decimal numbers is no longer broken.\ +- Targets can now be paused before the first search.\ +- Other minor bugs.\ \ -Have I got you thoroughly scared yet? Don't be! Like I said, The Cheat is easy to learn and problems rarely occur. Just don't do anything weird like search for zero then change all the results at once, and you'll be fine!\ +1.0b2 (11/12/03, internal)\ +New Features:\ +- Remote cheating (cheat games over a network).\ +- Pause target (pause without switching applications).\ +Bug Fixes:\ +- Some user interface glitches fixed.\ +Other Changes:\ +- New icon.\ +\ +1.0b1 (09/04/03, public)\ +Features:\ +- Searching and changing integers, strings, and floats.\ +- Changing variables from a list. +\f1\fs28 \ +\ +Remember, different versions of The Cheat are not guaranteed to be able to communicate with each other using the remote cheating feature. It is highly recommended that you upgrade every copy on you network if you use remote cheating.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qj -\f4\b \ -Help/Support -\f3\b0 \ +\f0\b \cf0 My computer died. Can I sue you? +\f1\b0 \ \ -Got questions about this software? Not sure what to do? Or maybe you've got a bug to report? Support for The Cheat is provided through email and the BrokenZipper website (see contact information below).\ +Uh, no... Here are the complete terms of use:\ \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qj -\f4\b Contact Information -\f3\b0 \ +\f4\fs24 \cf0 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +\f1\fs28 \ \ -Email: chaz@brokenzipper.com\ -Web: http://www.brokenzipper.com\ +Fortunately, The Cheat hasn't yet caused any dead computers to my knowledge. Let's cross our fingers and hope the luck continues.\ \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qj -\f4\b Legal... Stuff -\f3\b0 \ +\f0\b \cf0 So what else is there? +\f1\b0 \ \ -No warranty of any kind is provided with the use of The Cheat. By using this software, you agree that you do so at your own risk. This software is \'a9 2003, Chaz McGarvey. Distributing this software is allowed as long as the executable is unedited and this Read Me file is included.} \ No newline at end of file +Well that's pretty much it. If you are new to universal game trainers, I highly recommend that you go through the included tutorial before you try to figure it out yourself and ultimately become frustrated. The tutorial doesn't include everything, though, so visit the forums or email me if you need additional help. I'm really quite willing to help provided I have time. Other than that, just have fun with The Cheat. Or don't. Whatever.\ +} \ No newline at end of file diff --git a/The Cheat.pbproj/chaz.pbxuser b/The Cheat.pbproj/chaz.pbxuser index a34ce14..bd54b8c 100644 --- a/The Cheat.pbproj/chaz.pbxuser +++ b/The Cheat.pbproj/chaz.pbxuser @@ -2,9 +2,9 @@ { 089C1660FE840EACC02AAC07 = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1034, 641}}"; - sepNavSelRange = "{155, 0}"; - sepNavVisRect = "{{0, 0}, {1034, 641}}"; + sepNavIntBoundsRect = "{{0, 0}, {1002, 834}}"; + sepNavSelRange = "{203, 0}"; + sepNavVisRect = "{{0, 0}, {1002, 834}}"; }; }; 2A37F4A9FDCFA73011CA2CEA = { @@ -36,11 +36,11 @@ }; PBXConfiguration.PBXFileTableDataSource3.PBXErrorsWarningsDataSource = { PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; - PBXFileTableDataSourceColumnSortingKey = PBXErrorsWarningsDataSource_LocationID; + PBXFileTableDataSourceColumnSortingKey = PBXErrorsWarningsDataSource_MessageID; PBXFileTableDataSourceColumnWidthsKey = ( 20, - 685.8799, - 365.2085, + 651.8799, + 348.2085, ); PBXFileTableDataSourceColumnsKey = ( PBXErrorsWarningsDataSource_TypeID, @@ -65,9 +65,9 @@ PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; PBXFileTableDataSourceColumnWidthsKey = ( 20, - 772, + 729, 20, - 137, + 129, 43, 43, 20, @@ -115,10 +115,10 @@ PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; PBXFileTableDataSourceColumnWidthsKey = ( 20, - 653, - 138, + 616, + 131, 20, - 138, + 131, 43, 43, ); @@ -132,7 +132,7 @@ PBXFileDataSource_Warnings_ColumnID, ); }; - PBXPerProjectTemplateStateSaveDate = 100313467; + PBXPerProjectTemplateStateSaveDate = 100473363; PBXPrepackagedSmartGroups_v2 = ( { PBXTransientLocationAtTop = bottom; @@ -307,43 +307,86 @@ _percentageOfCollapsedView = 0; isCollapsed = yes; sizes = ( - "{{0, 0}, {1098, 227}}", - "{{0, 227}, {1098, 639}}", + "{{0, 0}, {1047, 0}}", + "{{0, 0}, {1047, 866}}", ); }; PBXProjectWorkspaceModule_DataSourceSelectionKey_Rev6 = { - BoundsStr = "{{0, 0}, {1083, 210}}"; + BoundsStr = "{{0, 0}, {1032, 15}}"; Rows = ( 0, ); - VisibleRectStr = "{{0, 0}, {1083, 210}}"; + VisibleRectStr = "{{0, 0}, {0, 0}}"; }; PBXProjectWorkspaceModule_EditorOpen = true; PBXProjectWorkspaceModule_EmbeddedNavigatorGroup = { PBXSplitModuleInNavigatorKey = { Split0 = { - bookmark = 6E90C19205FAAA0900857F22; + bookmark = 6E55007505FD2CAE00EE693C; history = ( - 6E48626A059421D8006D09F8, - 6E48626B059421D8006D09F8, - 6E48626C059421D8006D09F8, - 6E48626D059421D8006D09F8, - 6E48626E059421D8006D09F8, 6E48626F059421D8006D09F8, - 6E9D6CEB059429D400D9A2D7, - 6E90C17705FAA6B400857F22, - 6E90C17C05FAA6C400857F22, + 6E90C09D05FA7EAA00857F22, + 6E90C0DC05FA979F00857F22, + 6E90C16605FAA5FB00857F22, + 6E90C34005FB0CB300857F22, + 6E90C39A05FC0B3600857F22, + 6E8DD55E05FC512600D2C0EA, + 6E8DD56405FC5BD100D2C0EA, + 6E8DD5D705FC5F3500D2C0EA, + 6E8DD5E305FC605F00D2C0EA, + 6E8DD5EA05FC607A00D2C0EA, + 6E8DD64605FC674200D2C0EA, + 6E8DD66605FC696100D2C0EA, + 6E8DD66A05FC696500D2C0EA, + 6E8DD68105FC6AF400D2C0EA, + 6E8DD69505FC6B7600D2C0EA, + 6E8DD6CB05FC701300D2C0EA, + 6E8DD6CF05FC709E00D2C0EA, + 6E8DD6D305FC70A100D2C0EA, + 6E8DD6EA05FC748B00D2C0EA, + 6E8DD6FA05FC758F00D2C0EA, + 6E8DD70C05FC762900D2C0EA, + 6E8DD71105FC762C00D2C0EA, + 6E8DD71605FC763300D2C0EA, + 6E8DD71B05FC763C00D2C0EA, + 6E8DD74405FC776700D2C0EA, + 6E8DD74D05FC777D00D2C0EA, + 6E8DD75305FC778700D2C0EA, + 6E8DD76105FC783B00D2C0EA, + 6E8DD76205FC783B00D2C0EA, + 6E55007005FD2C9D00EE693C, + 6E55007205FD2C9D00EE693C, + 6E90C2DC05FAAF2700857F22, ); prevStack = ( - 6E486273059421D8006D09F8, - 6E486274059421D8006D09F8, 6E486275059421D8006D09F8, 6E486276059421D8006D09F8, 6E486277059421D8006D09F8, - 6E48627B059421D8006D09F8, 6E48627C059421D8006D09F8, 6E9D6CED059429D400D9A2D7, - 6E90C17805FAA6B400857F22, + 6E8EDFDA05F7DBEE00ED3F4F, + 6E90BB0805F7EC7600857F22, + 6E90BE2A05F86C7800857F22, + 6E90BE4F05F86D1000857F22, + 6E90BE5405F86D3200857F22, + 6E90C09A05FA7EA900857F22, + 6E90C09E05FA7EAA00857F22, + 6E90C16705FAA5FB00857F22, + 6E90C28705FAADF700857F22, + 6E90C35F05FB0DAD00857F22, + 6E90C36C05FC07B100857F22, + 6E8DD58F05FC5D1E00D2C0EA, + 6E8DD5F505FC642800D2C0EA, + 6E8DD65F05FC692500D2C0EA, + 6E8DD68A05FC6B5C00D2C0EA, + 6E8DD6F305FC74F400D2C0EA, + 6E8DD70505FC761C00D2C0EA, + 6E8DD70905FC762000D2C0EA, + 6E8DD71305FC762C00D2C0EA, + 6E8DD71805FC763300D2C0EA, + 6E8DD71C05FC763C00D2C0EA, + 6E55006805FD21B800EE693C, + 6E55007305FD2C9D00EE693C, ); }; SplitCount = 1; @@ -355,14 +398,14 @@ _indexOfCollapsedView = 0; _percentageOfCollapsedView = 0; sizes = ( - "{{0, 0}, {182, 866}}", - "{{182, 0}, {1098, 866}}", + "{{0, 0}, {233, 866}}", + "{{233, 0}, {1047, 866}}", ); }; }; - PBXProjectWorkspaceModule_OldDetailFrame = "{{0, 0}, {1098, 227}}"; - PBXProjectWorkspaceModule_OldEditorFrame = "{{0, 227}, {1098, 639}}"; - PBXProjectWorkspaceModule_OldSuperviewFrame = "{{182, 0}, {1098, 866}}"; + PBXProjectWorkspaceModule_OldDetailFrame = "{{0, 0}, {1047, 0}}"; + PBXProjectWorkspaceModule_OldEditorFrame = "{{0, 0}, {1047, 866}}"; + PBXProjectWorkspaceModule_OldSuperviewFrame = "{{233, 0}, {1047, 866}}"; PBXProjectWorkspaceModule_SGTM = { PBXBottomSmartGroupGIDs = ( 1C37FBAC04509CD000000102, @@ -377,7 +420,7 @@ ); PBXSmartGroupTreeModuleColumnData = { PBXSmartGroupTreeModuleColumnWidthsKey = ( - 165, + 216, ); PBXSmartGroupTreeModuleColumnsKey_v4 = ( MainColumn, @@ -388,18 +431,20 @@ 2A37F4AAFDCFA73011CA2CEA, 6E0D40B3052243B800A80003, 2A37F4ABFDCFA73011CA2CEA, + 6E0D40BF05224F4B00A80003, 2A37F4AFFDCFA73011CA2CEA, 2A37F4B8FDCFA73011CA2CEA, + 6E8EE12505F7EA8100ED3F4F, 1C37FBAC04509CD000000102, ); PBXSmartGroupTreeModuleOutlineStateSelectionKey = ( ( - 16, - 12, + 45, + 37, 0, ), ); - PBXSmartGroupTreeModuleOutlineStateVisibleRectKey = "{{0, 0}, {165, 848}}"; + PBXSmartGroupTreeModuleOutlineStateVisibleRectKey = "{{0, 189}, {216, 848}}"; }; PBXTopSmartGroupGIDs = ( ); @@ -419,6 +464,29 @@ "PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXDebugCLIModule" = { }; "PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXDebugSessionModule" = { + Debugger = { + HorizontalSplitView = { + _collapsingFrameDimension = 0; + _indexOfCollapsedView = 0; + _percentageOfCollapsedView = 0; + isCollapsed = yes; + sizes = ( + "{{0, 0}, {327, 353}}", + "{{327, 0}, {534, 353}}", + ); + }; + VerticalSplitView = { + _collapsingFrameDimension = 0; + _indexOfCollapsedView = 0; + _percentageOfCollapsedView = 0; + isCollapsed = yes; + sizes = ( + "{{0, 0}, {861, 353}}", + "{{0, 353}, {861, 362}}", + ); + }; + }; + LauncherConfigVersion = 8; }; "PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXNavigatorGroup" = { Split0 = { @@ -981,6 +1049,7 @@ { Frame = "{{0, 0}, {1280, 866}}"; PBXProjectWorkspaceModule_GeometryKey_Rev15 = { + PBXProjectWorkspaceModule_RunWindowVisible = true; }; RubberWindowFrame = "0 94 1280 908 0 0 1280 1002 "; }, @@ -1036,16 +1105,16 @@ DebugConsoleVisible = Drawer; DebugConsoleWindowFrame = "{{200, 200}, {500, 300}}"; DebugSTDIOWindowFrame = "{{200, 200}, {500, 300}}"; - Frame = "{{0, 0}, {861, 735}}"; - WindowFrame = "{{426, 189}, {861, 813}}"; + Frame = "{{0, 0}, {861, 715}}"; + RubberWindowFrame = "385 232 861 757 0 0 1280 1002 "; }; "PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXNavigatorGroup" = { Frame = "{{0, 0}, {750, 480}}"; WindowFrame = "{{61, 397}, {750, 558}}"; }; "PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXProjectFindModule" = { - Frame = "{{0, 0}, {614, 100}}"; - RubberWindowFrame = "333 721 614 142 0 0 1280 1002 "; + Frame = "{{0, 0}, {634, 488}}"; + RubberWindowFrame = "333 371 634 530 0 0 1280 1002 "; }; "PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXProjectWorkspaceModule" = { Frame = "{{0, 0}, {1280, 886}}"; @@ -1065,29 +1134,72 @@ "PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXRunSessionModule" = { Frame = "{{0, 0}, {767, 743}}"; PBXModuleWindowStatusBarHidden = YES; - RubberWindowFrame = "445 139 767 764 0 0 1280 1002 "; + RubberWindowFrame = "504 116 767 764 0 0 1280 1002 "; }; - PBXWorkspaceStateSaveDate = 100313467; + PBXWorkspaceStateSaveDate = 100473363; }; perUserProjectItems = { - 6E48626A059421D8006D09F8 = 6E48626A059421D8006D09F8; - 6E48626B059421D8006D09F8 = 6E48626B059421D8006D09F8; - 6E48626C059421D8006D09F8 = 6E48626C059421D8006D09F8; - 6E48626D059421D8006D09F8 = 6E48626D059421D8006D09F8; - 6E48626E059421D8006D09F8 = 6E48626E059421D8006D09F8; 6E48626F059421D8006D09F8 = 6E48626F059421D8006D09F8; - 6E486273059421D8006D09F8 = 6E486273059421D8006D09F8; - 6E486274059421D8006D09F8 = 6E486274059421D8006D09F8; 6E486275059421D8006D09F8 = 6E486275059421D8006D09F8; 6E486276059421D8006D09F8 = 6E486276059421D8006D09F8; 6E486277059421D8006D09F8 = 6E486277059421D8006D09F8; - 6E48627B059421D8006D09F8 = 6E48627B059421D8006D09F8; 6E48627C059421D8006D09F8 = 6E48627C059421D8006D09F8; - 6E90C17705FAA6B400857F22 = 6E90C17705FAA6B400857F22; - 6E90C17805FAA6B400857F22 = 6E90C17805FAA6B400857F22; - 6E90C17C05FAA6C400857F22 = 6E90C17C05FAA6C400857F22; - 6E90C19205FAAA0900857F22 = 6E90C19205FAAA0900857F22; - 6E9D6CEB059429D400D9A2D7 = 6E9D6CEB059429D400D9A2D7; + 6E55006805FD21B800EE693C = 6E55006805FD21B800EE693C; + 6E55007005FD2C9D00EE693C = 6E55007005FD2C9D00EE693C; + 6E55007205FD2C9D00EE693C = 6E55007205FD2C9D00EE693C; + 6E55007305FD2C9D00EE693C = 6E55007305FD2C9D00EE693C; + 6E55007505FD2CAE00EE693C = 6E55007505FD2CAE00EE693C; + 6E8DD55E05FC512600D2C0EA = 6E8DD55E05FC512600D2C0EA; + 6E8DD56405FC5BD100D2C0EA = 6E8DD56405FC5BD100D2C0EA; + 6E8DD58F05FC5D1E00D2C0EA = 6E8DD58F05FC5D1E00D2C0EA; + 6E8DD5D705FC5F3500D2C0EA = 6E8DD5D705FC5F3500D2C0EA; + 6E8DD5E305FC605F00D2C0EA = 6E8DD5E305FC605F00D2C0EA; + 6E8DD5EA05FC607A00D2C0EA = 6E8DD5EA05FC607A00D2C0EA; + 6E8DD5F505FC642800D2C0EA = 6E8DD5F505FC642800D2C0EA; + 6E8DD64605FC674200D2C0EA = 6E8DD64605FC674200D2C0EA; + 6E8DD65F05FC692500D2C0EA = 6E8DD65F05FC692500D2C0EA; + 6E8DD66605FC696100D2C0EA = 6E8DD66605FC696100D2C0EA; + 6E8DD66A05FC696500D2C0EA = 6E8DD66A05FC696500D2C0EA; + 6E8DD68105FC6AF400D2C0EA = 6E8DD68105FC6AF400D2C0EA; + 6E8DD68A05FC6B5C00D2C0EA = 6E8DD68A05FC6B5C00D2C0EA; + 6E8DD69505FC6B7600D2C0EA = 6E8DD69505FC6B7600D2C0EA; + 6E8DD6CB05FC701300D2C0EA = 6E8DD6CB05FC701300D2C0EA; + 6E8DD6CF05FC709E00D2C0EA = 6E8DD6CF05FC709E00D2C0EA; + 6E8DD6D305FC70A100D2C0EA = 6E8DD6D305FC70A100D2C0EA; + 6E8DD6EA05FC748B00D2C0EA = 6E8DD6EA05FC748B00D2C0EA; + 6E8DD6F305FC74F400D2C0EA = 6E8DD6F305FC74F400D2C0EA; + 6E8DD6FA05FC758F00D2C0EA = 6E8DD6FA05FC758F00D2C0EA; + 6E8DD70505FC761C00D2C0EA = 6E8DD70505FC761C00D2C0EA; + 6E8DD70905FC762000D2C0EA = 6E8DD70905FC762000D2C0EA; + 6E8DD70C05FC762900D2C0EA = 6E8DD70C05FC762900D2C0EA; + 6E8DD71105FC762C00D2C0EA = 6E8DD71105FC762C00D2C0EA; + 6E8DD71305FC762C00D2C0EA = 6E8DD71305FC762C00D2C0EA; + 6E8DD71605FC763300D2C0EA = 6E8DD71605FC763300D2C0EA; + 6E8DD71805FC763300D2C0EA = 6E8DD71805FC763300D2C0EA; + 6E8DD71B05FC763C00D2C0EA = 6E8DD71B05FC763C00D2C0EA; + 6E8DD71C05FC763C00D2C0EA = 6E8DD71C05FC763C00D2C0EA; + 6E8DD74405FC776700D2C0EA = 6E8DD74405FC776700D2C0EA; + 6E8DD74D05FC777D00D2C0EA = 6E8DD74D05FC777D00D2C0EA; + 6E8DD75305FC778700D2C0EA = 6E8DD75305FC778700D2C0EA; + 6E8DD76105FC783B00D2C0EA = 6E8DD76105FC783B00D2C0EA; + 6E8DD76205FC783B00D2C0EA = 6E8DD76205FC783B00D2C0EA; + 6E8EDFDA05F7DBEE00ED3F4F = 6E8EDFDA05F7DBEE00ED3F4F; + 6E90BB0805F7EC7600857F22 = 6E90BB0805F7EC7600857F22; + 6E90BE2A05F86C7800857F22 = 6E90BE2A05F86C7800857F22; + 6E90BE4F05F86D1000857F22 = 6E90BE4F05F86D1000857F22; + 6E90BE5405F86D3200857F22 = 6E90BE5405F86D3200857F22; + 6E90C09A05FA7EA900857F22 = 6E90C09A05FA7EA900857F22; + 6E90C09D05FA7EAA00857F22 = 6E90C09D05FA7EAA00857F22; + 6E90C09E05FA7EAA00857F22 = 6E90C09E05FA7EAA00857F22; + 6E90C0DC05FA979F00857F22 = 6E90C0DC05FA979F00857F22; + 6E90C16605FAA5FB00857F22 = 6E90C16605FAA5FB00857F22; + 6E90C16705FAA5FB00857F22 = 6E90C16705FAA5FB00857F22; + 6E90C28705FAADF700857F22 = 6E90C28705FAADF700857F22; + 6E90C2DC05FAAF2700857F22 = 6E90C2DC05FAAF2700857F22; + 6E90C34005FB0CB300857F22 = 6E90C34005FB0CB300857F22; + 6E90C35F05FB0DAD00857F22 = 6E90C35F05FB0DAD00857F22; + 6E90C36C05FC07B100857F22 = 6E90C36C05FC07B100857F22; + 6E90C39A05FC0B3600857F22 = 6E90C39A05FC0B3600857F22; 6E9D6CED059429D400D9A2D7 = 6E9D6CED059429D400D9A2D7; }; sourceControlManager = 6EAD5EEA054C3932005761EE; @@ -1096,17 +1208,17 @@ }; 2A37F4ACFDCFA73011CA2CEA = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {2309, 29343}}"; - sepNavSelRange = "{31411, 0}"; - sepNavVisRect = "{{0, 20829}, {1053, 631}}"; + sepNavIntBoundsRect = "{{0, 0}, {2309, 29535}}"; + sepNavSelRange = "{13414, 0}"; + sepNavVisRect = "{{0, 7443}, {1002, 587}}"; sepNavWindowFrame = "{{15, 439}, {750, 558}}"; }; }; 2A37F4AEFDCFA73011CA2CEA = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1034, 3200}}"; - sepNavSelRange = "{1349, 19}"; - sepNavVisRect = "{{0, 376}, {1034, 641}}"; + sepNavIntBoundsRect = "{{0, 0}, {1002, 3216}}"; + sepNavSelRange = "{1020, 0}"; + sepNavVisRect = "{{0, 842}, {1002, 587}}"; }; }; 2A37F4B0FDCFA73011CA2CEA = { @@ -1132,35 +1244,35 @@ uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {1266, 655}}"; sepNavSelRange = "{504, 0}"; - sepNavVisRect = "{{0, 0}, {1034, 641}}"; + sepNavVisRect = "{{0, 0}, {1002, 597}}"; }; }; 6E0D40AC05223CCE00A80003 = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1034, 720}}"; - sepNavSelRange = "{0, 0}"; - sepNavVisRect = "{{0, 0}, {1034, 710}}"; + sepNavIntBoundsRect = "{{0, 0}, {1002, 784}}"; + sepNavSelRange = "{778, 9}"; + sepNavVisRect = "{{0, 133}, {1002, 587}}"; }; }; 6E0D40AD05223CCE00A80003 = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1034, 2672}}"; - sepNavSelRange = "{375, 0}"; - sepNavVisRect = "{{0, 40}, {1034, 641}}"; + sepNavIntBoundsRect = "{{0, 0}, {1002, 2960}}"; + sepNavSelRange = "{1743, 0}"; + sepNavVisRect = "{{0, 963}, {1002, 587}}"; }; }; 6E0D40B4052243D500A80003 = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1034, 710}}"; - sepNavSelRange = "{440, 18}"; - sepNavVisRect = "{{0, 0}, {1034, 710}}"; + sepNavIntBoundsRect = "{{0, 0}, {1002, 848}}"; + sepNavSelRange = "{1172, 29}"; + sepNavVisRect = "{{0, 229}, {1002, 587}}"; }; }; 6E0D40B5052243D500A80003 = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1034, 2032}}"; - sepNavSelRange = "{2002, 96}"; - sepNavVisRect = "{{0, 853}, {1034, 641}}"; + sepNavIntBoundsRect = "{{0, 0}, {1133, 3216}}"; + sepNavSelRange = "{5501, 0}"; + sepNavVisRect = "{{0, 520}, {1002, 587}}"; }; }; 6E0D40B80522449500A80003 = { @@ -1177,11 +1289,32 @@ sepNavVisRect = "{{0, 2372}, {822, 329}}"; }; }; + 6E0D40C005224FD000A80003 = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1002, 587}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRect = "{{0, 0}, {1002, 587}}"; + }; + }; + 6E0D40C405225DA100A80003 = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1002, 587}}"; + sepNavSelRange = "{377, 53}"; + sepNavVisRect = "{{0, 0}, {1002, 587}}"; + }; + }; + 6E0D40CA0522815100A80003 = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1002, 587}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRect = "{{0, 0}, {1002, 587}}"; + }; + }; 6E0D40CE0522820D00A80003 = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1034, 710}}"; + sepNavIntBoundsRect = "{{0, 0}, {1002, 587}}"; sepNavSelRange = "{0, 0}"; - sepNavVisRect = "{{0, 0}, {1034, 710}}"; + sepNavVisRect = "{{0, 0}, {1002, 587}}"; }; }; 6E146B11051FA42C00A80003 = { @@ -1212,56 +1345,6 @@ sepNavVisRect = "{{0, 952}, {1059, 536}}"; }; }; - 6E48626A059421D8006D09F8 = { - fRef = 6E4E098C050BB21400A80003; - isa = PBXTextBookmark; - name = "AppController.h: launchWebsiteMenu:"; - rLen = 0; - rLoc = 1470; - rType = 0; - vrLen = 986; - vrLoc = 516; - }; - 6E48626B059421D8006D09F8 = { - fRef = 6E51A986057330B900506538; - isa = PBXTextBookmark; - name = "cheat_shared.h: 17"; - rLen = 0; - rLoc = 401; - rType = 0; - vrLen = 409; - vrLoc = 0; - }; - 6E48626C059421D8006D09F8 = { - fRef = 6E51A987057330B900506538; - isa = PBXTextBookmark; - name = "cheat_shared.m: LaunchEmail"; - rLen = 0; - rLoc = 607; - rType = 0; - vrLen = 607; - vrLoc = 0; - }; - 6E48626D059421D8006D09F8 = { - fRef = 6E4E098D050BB21400A80003; - isa = PBXTextBookmark; - name = "AppController.m: 152"; - rLen = 0; - rLoc = 3791; - rType = 0; - vrLen = 824; - vrLoc = 3500; - }; - 6E48626E059421D8006D09F8 = { - fRef = 2A37F4ACFDCFA73011CA2CEA; - isa = PBXTextBookmark; - name = "MyDocument.m: 1322"; - rLen = 0; - rLoc = 31411; - rType = 0; - vrLen = 808; - vrLoc = 31067; - }; 6E48626F059421D8006D09F8 = { fRef = 6E146B12051FA42C00A80003; isa = PBXTextBookmark; @@ -1272,32 +1355,12 @@ vrLen = 894; vrLoc = 3020; }; - 6E486273059421D8006D09F8 = { - fRef = 2A37F4ACFDCFA73011CA2CEA; - isa = PBXTextBookmark; - name = "MyDocument.m: 230"; - rLen = 0; - rLoc = 6178; - rType = 0; - vrLen = 1217; - vrLoc = 3415; - }; - 6E486274059421D8006D09F8 = { - fRef = 6E4E098D050BB21400A80003; - isa = PBXTextBookmark; - name = "AppController.m: 160"; - rLen = 0; - rLoc = 4125; - rType = 0; - vrLen = 824; - vrLoc = 3500; - }; 6E486275059421D8006D09F8 = { fRef = 6E4E098C050BB21400A80003; isa = PBXTextBookmark; name = "AppController.h: launchWebsiteMenu:"; rLen = 0; - rLoc = 1470; + rLoc = 1550; rType = 0; vrLen = 986; vrLoc = 516; @@ -1307,7 +1370,7 @@ isa = PBXTextBookmark; name = "cheat_shared.m: 21"; rLen = 0; - rLoc = 605; + rLoc = 609; rType = 0; vrLen = 607; vrLoc = 0; @@ -1322,16 +1385,6 @@ vrLen = 409; vrLoc = 0; }; - 6E48627B059421D8006D09F8 = { - fRef = 6E4E098E050BB21400A80003; - isa = PBXTextBookmark; - name = "CheatServer.m: 193"; - rLen = 0; - rLoc = 4274; - rType = 0; - vrLen = 883; - vrLoc = 3582; - }; 6E48627C059421D8006D09F8 = { fRef = 6E146B12051FA42C00A80003; isa = PBXTextBookmark; @@ -1344,121 +1397,682 @@ }; 6E4E098C050BB21400A80003 = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1053, 976}}"; - sepNavSelRange = "{1470, 0}"; - sepNavVisRect = "{{0, 345}, {1053, 631}}"; + sepNavIntBoundsRect = "{{0, 0}, {1002, 1024}}"; + sepNavSelRange = "{1429, 39}"; + sepNavVisRect = "{{0, 437}, {1002, 587}}"; }; }; 6E4E098D050BB21400A80003 = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1063, 7232}}"; - sepNavSelRange = "{3791, 0}"; - sepNavVisRect = "{{0, 2173}, {1053, 631}}"; + sepNavIntBoundsRect = "{{0, 0}, {1063, 8144}}"; + sepNavSelRange = "{6031, 0}"; + sepNavVisRect = "{{0, 3348}, {1002, 587}}"; }; }; 6E4E098E050BB21400A80003 = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1287, 33104}}"; - sepNavSelRange = "{36909, 64}"; - sepNavVisRect = "{{0, 24923}, {1053, 607}}"; + sepNavIntBoundsRect = "{{0, 0}, {1287, 33680}}"; + sepNavSelRange = "{18387, 0}"; + sepNavVisRect = "{{0, 11684}, {1002, 834}}"; sepNavWindowFrame = "{{0, 51}, {1280, 951}}"; }; }; 6E4E098F050BB21400A80003 = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1053, 1679}}"; - sepNavSelRange = "{2334, 0}"; - sepNavVisRect = "{{0, 568}, {1053, 622}}"; + sepNavIntBoundsRect = "{{0, 0}, {1002, 1695}}"; + sepNavSelRange = "{834, 22}"; + sepNavVisRect = "{{0, 309}, {1002, 587}}"; }; }; 6E51A97C0573304C00506538 = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1034, 710}}"; - sepNavSelRange = "{414, 0}"; - sepNavVisRect = "{{0, 0}, {1034, 710}}"; + sepNavIntBoundsRect = "{{0, 0}, {1002, 587}}"; + sepNavSelRange = "{459, 0}"; + sepNavVisRect = "{{0, 0}, {1002, 587}}"; }; }; 6E51A97D0573304C00506538 = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1034, 710}}"; - sepNavSelRange = "{424, 0}"; - sepNavVisRect = "{{0, 0}, {1034, 710}}"; + sepNavIntBoundsRect = "{{0, 0}, {1002, 703}}"; + sepNavSelRange = "{655, 0}"; + sepNavVisRect = "{{0, 101}, {1002, 592}}"; }; }; 6E51A986057330B900506538 = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1053, 631}}"; + sepNavIntBoundsRect = "{{0, 0}, {1002, 587}}"; sepNavSelRange = "{401, 0}"; - sepNavVisRect = "{{0, 0}, {1053, 631}}"; + sepNavVisRect = "{{0, 0}, {1002, 587}}"; }; }; 6E51A987057330B900506538 = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1053, 631}}"; - sepNavSelRange = "{607, 0}"; - sepNavVisRect = "{{0, 0}, {1053, 631}}"; + sepNavIntBoundsRect = "{{0, 0}, {1002, 587}}"; + sepNavSelRange = "{456, 0}"; + sepNavVisRect = "{{0, 0}, {1002, 587}}"; }; }; + 6E55006805FD21B800EE693C = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = vm_read_overwrite; + rLen = 17; + rLoc = 18241; + rType = 0; + vrLen = 1417; + vrLoc = 17209; + }; + 6E55007005FD2C9D00EE693C = { + fRef = 6E55007605FD2CAE00EE693C; + isa = PBXTextBookmark; + name = "kern_return_t vm_read_overwrite\n"; + rLen = 32; + rLoc = 3105; + rType = 0; + vrLen = 843; + vrLoc = 2681; + }; + 6E55007205FD2C9D00EE693C = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 759"; + rLen = 0; + rLoc = 18387; + rType = 0; + vrLen = 1273; + vrLoc = 17613; + }; + 6E55007305FD2C9D00EE693C = { + fRef = 6E4E098E050BB21400A80003; + isa = PBXTextBookmark; + name = "CheatServer.m: 759"; + rLen = 0; + rLoc = 18387; + rType = 0; + vrLen = 1273; + vrLoc = 17613; + }; + 6E55007505FD2CAE00EE693C = { + fRef = 089C1660FE840EACC02AAC07; + isa = PBXTextBookmark; + name = "English: 7"; + rLen = 0; + rLoc = 203; + rType = 0; + vrLen = 203; + vrLoc = 0; + }; + 6E55007605FD2CAE00EE693C = { + isa = PBXFileReference; + name = vm_map.h; + path = /Developer/SDKs/MacOSX10.2.7.sdk/usr/include/mach/vm_map.h; + refType = 0; + sourceTree = ""; + }; 6E71F41B051BCCC600A80003 = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1034, 655}}"; - sepNavSelRange = "{384, 0}"; - sepNavVisRect = "{{0, 0}, {1034, 641}}"; + sepNavIntBoundsRect = "{{0, 0}, {1002, 719}}"; + sepNavSelRange = "{424, 0}"; + sepNavVisRect = "{{0, 96}, {1002, 587}}"; }; }; 6E71F41C051BCCC600A80003 = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1034, 710}}"; - sepNavSelRange = "{347, 0}"; - sepNavVisRect = "{{0, 0}, {1034, 710}}"; + sepNavIntBoundsRect = "{{0, 0}, {1002, 587}}"; + sepNavSelRange = "{1093, 19}"; + sepNavVisRect = "{{0, 0}, {1002, 587}}"; }; }; - 6E90C17705FAA6B400857F22 = { - fRef = 6E3309E10575BA9D0093550E; + 6E8DD55E05FC512600D2C0EA = { + fRef = 6E51A986057330B900506538; + isa = PBXTextBookmark; + name = "cheat_shared.h: 17"; + rLen = 0; + rLoc = 401; + rType = 0; + vrLen = 409; + vrLoc = 0; + }; + 6E8DD56405FC5BD100D2C0EA = { + fRef = 6E51A987057330B900506538; + isa = PBXTextBookmark; + name = "cheat_shared.m: LaunchWebsite"; + rLen = 0; + rLoc = 456; + rType = 0; + vrLen = 611; + vrLoc = 0; + }; + 6E8DD58F05FC5D1E00D2C0EA = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: maxSearchResultsAmount"; + rLen = 0; + rLoc = 1020; + rType = 0; + vrLen = 850; + vrLoc = 576; + }; + 6E8DD5D705FC5F3500D2C0EA = { + fRef = 6E4E098F050BB21400A80003; + isa = PBXTextBookmark; + name = maxSearchResultsAmount; + rLen = 22; + rLoc = 834; + rType = 0; + vrLen = 685; + vrLoc = 444; + }; + 6E8DD5E305FC605F00D2C0EA = { + fRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.h: maxSearchResultsAmount"; + rLen = 0; + rLoc = 1020; + rType = 0; + vrLen = 1195; + vrLoc = 1147; + }; + 6E8DD5EA05FC607A00D2C0EA = { + fRef = 6E8DD5EF05FC609800D2C0EA; + isa = PBXTextBookmark; + name = "- (void)setToolTip:(NSString *)string;\n"; + rLen = 39; + rLoc = 7558; + rType = 0; + vrLen = 1345; + vrLoc = 6975; + }; + 6E8DD5EF05FC609800D2C0EA = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = NSView.h; + path = /Developer/SDKs/MacOSX10.2.7.sdk/System/Library/Frameworks/AppKit.framework/Versions/C/Headers/NSView.h; + refType = 0; + sourceTree = ""; + }; + 6E8DD5F505FC642800D2C0EA = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 478"; + rLen = 0; + rLoc = 13414; + rType = 0; + vrLen = 848; + vrLoc = 13024; + }; + 6E8DD64605FC674200D2C0EA = { + fRef = 6E8DD64F05FC674900D2C0EA; + isa = PBXTextBookmark; + name = "- (void)orderOut:(id)sender;\n"; + rLen = 29; + rLoc = 9802; + rType = 0; + vrLen = 1051; + vrLoc = 9293; + }; + 6E8DD64F05FC674900D2C0EA = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = NSWindow.h; + path = /Developer/SDKs/MacOSX10.2.7.sdk/System/Library/Frameworks/AppKit.framework/Versions/C/Headers/NSWindow.h; + refType = 0; + sourceTree = ""; + }; + 6E8DD65F05FC692500D2C0EA = { + fRef = 6E0D40C005224FD000A80003; + isa = PBXTextBookmark; + name = "NetTrafficControlling.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 501; + vrLoc = 0; + }; + 6E8DD66605FC696100D2C0EA = { + fRef = 6E51A97C0573304C00506538; + isa = PBXTextBookmark; + name = "AboutBoxController.h: nameVersionText"; + rLen = 0; + rLoc = 459; + rType = 0; + vrLen = 573; + vrLoc = 0; + }; + 6E8DD66A05FC696500D2C0EA = { + fRef = 6E4E098C050BB21400A80003; + isa = PBXTextBookmark; + name = "- (IBAction)launchEmailMenu:(id)sender;"; + rLen = 39; + rLoc = 1429; + rType = 0; + vrLen = 880; + vrLoc = 702; + }; + 6E8DD68105FC6AF400D2C0EA = { + fRef = 6E8DD68505FC6B1200D2C0EA; + isa = PBXTextBookmark; + name = " NSOnState = 1 \n"; + rLen = 26; + rLoc = 1481; + rType = 0; + vrLen = 837; + vrLoc = 1061; + }; + 6E8DD68505FC6B1200D2C0EA = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = NSCell.h; + path = /Developer/SDKs/MacOSX10.2.7.sdk/System/Library/Frameworks/AppKit.framework/Versions/C/Headers/NSCell.h; + refType = 0; + sourceTree = ""; + }; + 6E8DD68A05FC6B5C00D2C0EA = { + fRef = 6E0D40B5052243D500A80003; + isa = PBXTextBookmark; + name = "PreferenceController.m: 172"; + rLen = 0; + rLoc = 4523; + rType = 0; + vrLen = 1597; + vrLoc = 3780; + }; + 6E8DD69505FC6B7600D2C0EA = { + fRef = 6E0D40C405225DA100A80003; + isa = PBXTextBookmark; + name = "- (void)preferenceSetWindowsOnTop:(BOOL)windowsOnTop;"; + rLen = 53; + rLoc = 377; + rType = 0; + vrLen = 695; + vrLoc = 0; + }; + 6E8DD6CB05FC701300D2C0EA = { + fRef = 6E71F41C051BCCC600A80003; + isa = PBXTextBookmark; + name = TCHitsDisplayedPref; + rLen = 19; + rLoc = 1093; + rType = 0; + vrLen = 1138; + vrLoc = 0; + }; + 6E8DD6CF05FC709E00D2C0EA = { + fRef = 6E71F41B051BCCC600A80003; + isa = PBXTextBookmark; + name = "cheat_globals.h: TCDefaultListenPort"; + rLen = 0; + rLoc = 424; + rType = 0; + vrLen = 1210; + vrLoc = 169; + }; + 6E8DD6D305FC70A100D2C0EA = { + fRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXTextBookmark; + name = "MyDocument.m: 478"; + rLen = 0; + rLoc = 13414; + rType = 0; + vrLen = 848; + vrLoc = 13024; + }; + 6E8DD6EA05FC748B00D2C0EA = { + fRef = 6E8DD6ED05FC74A900D2C0EA; + isa = PBXTextBookmark; + name = "@interface NSNetService : NSObject {\n"; + rLen = 37; + rLoc = 678; + rType = 0; + vrLen = 2029; + vrLoc = 529; + }; + 6E8DD6ED05FC74A900D2C0EA = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = NSNetServices.h; + path = /Developer/SDKs/MacOSX10.2.7.sdk/System/Library/Frameworks/Foundation.framework/Versions/C/Headers/NSNetServices.h; + refType = 0; + sourceTree = ""; + }; + 6E8DD6F305FC74F400D2C0EA = { + fRef = 6E4E098D050BB21400A80003; + isa = PBXTextBookmark; + name = broadcastWithName; + rLen = 17; + rLoc = 2520; + rType = 0; + vrLen = 1300; + vrLoc = 1648; + }; + 6E8DD6FA05FC758F00D2C0EA = { + fRef = 6E0D40B5052243D500A80003; + isa = PBXTextBookmark; + name = "PreferenceController.m: 197"; + rLen = 0; + rLoc = 5501; + rType = 0; + vrLen = 1058; + vrLoc = 652; + }; + 6E8DD70505FC761C00D2C0EA = { + fRef = 6E0D40AD05223CCE00A80003; + isa = PBXTextBookmark; + name = "- (void)allowRemoteChanged:(BOOL)allow\n"; + rLen = 39; + rLoc = 2038; + rType = 0; + vrLen = 728; + vrLoc = 1206; + }; + 6E8DD70905FC762000D2C0EA = { + fRef = 6E0D40AC05223CCE00A80003; + isa = PBXTextBookmark; + name = "NetTrafficController.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 894; + vrLoc = 0; + }; + 6E8DD70C05FC762900D2C0EA = { + fRef = 6E0D40C005224FD000A80003; + isa = PBXTextBookmark; + name = "NetTrafficControlling.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 501; + vrLoc = 0; + }; + 6E8DD71105FC762C00D2C0EA = { + fRef = 6E0D40CA0522815100A80003; + isa = PBXTextBookmark; + name = "ListenerDelegate.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 568; + vrLoc = 0; + }; + 6E8DD71305FC762C00D2C0EA = { + fRef = 6E0D40CA0522815100A80003; + isa = PBXTextBookmark; + name = "ListenerDelegate.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 568; + vrLoc = 0; + }; + 6E8DD71605FC763300D2C0EA = { + fRef = 6EBCEEE60523E23700A80003; + isa = PBXTextBookmark; + name = "ServerDelegate.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 738; + vrLoc = 0; + }; + 6E8DD71805FC763300D2C0EA = { + fRef = 6EBCEEE60523E23700A80003; + isa = PBXTextBookmark; + name = "ServerDelegate.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 738; + vrLoc = 0; + }; + 6E8DD71B05FC763C00D2C0EA = { + fRef = 6E0D40CE0522820D00A80003; + isa = PBXTextBookmark; + name = "ClientDelegate.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 530; + vrLoc = 0; + }; + 6E8DD71C05FC763C00D2C0EA = { + fRef = 6E0D40CE0522820D00A80003; + isa = PBXTextBookmark; + name = "ClientDelegate.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 530; + vrLoc = 0; + }; + 6E8DD74405FC776700D2C0EA = { + fRef = 6E0D40AD05223CCE00A80003; + isa = PBXTextBookmark; + name = "NetTrafficController.m: 79"; + rLen = 0; + rLoc = 1743; + rType = 0; + vrLen = 876; + vrLoc = 1329; + }; + 6E8DD74D05FC777D00D2C0EA = { + fRef = 6E0D40B4052243D500A80003; + isa = PBXTextBookmark; + name = "- (IBAction)change:(id)sender"; + rLen = 29; + rLoc = 1172; + rType = 0; + vrLen = 918; + vrLoc = 377; + }; + 6E8DD75305FC778700D2C0EA = { + fRef = 6E0D40AC05223CCE00A80003; + isa = PBXTextBookmark; + name = serverSet; + rLen = 9; + rLoc = 778; + rType = 0; + vrLen = 832; + vrLoc = 235; + }; + 6E8DD76105FC783B00D2C0EA = { + fRef = 6E4E098D050BB21400A80003; + isa = PBXTextBookmark; + name = "AppController.m: 232"; + rLen = 0; + rLoc = 6031; + rType = 0; + vrLen = 1067; + vrLoc = 5336; + }; + 6E8DD76205FC783B00D2C0EA = { + fRef = 2A37F4B5FDCFA73011CA2CEA; isa = PBXBookmark; + name = "MyDocument.nib (English)"; + }; + 6E8EDFDA05F7DBEE00ED3F4F = { + fRef = 6E71F41B051BCCC600A80003; + isa = PBXTextBookmark; + name = "cheat_globals.h: 21"; + rLen = 0; + rLoc = 648; + rType = 0; + vrLen = 1218; + vrLoc = 0; + }; + 6E90BB0805F7EC7600857F22 = { + fRef = 6E4E098F050BB21400A80003; + isa = PBXTextBookmark; + name = " +"; + rLen = 1; + rLoc = 1090; + rType = 0; + vrLen = 727; + vrLoc = 0; }; - 6E90C17805FAA6B400857F22 = { - fRef = 6E3309E10575BA9D0093550E; + 6E90BE2A05F86C7800857F22 = { + fRef = 6E71F41C051BCCC600A80003; + isa = PBXTextBookmark; + name = "cheat_globals.m: TCGlobalUpdateAutomatically"; + rLen = 0; + rLoc = 620; + rType = 0; + vrLen = 994; + vrLoc = 0; + }; + 6E90BE4F05F86D1000857F22 = { + fRef = 6E0D40C405225DA100A80003; + isa = PBXTextBookmark; + name = "PreferenceControlling.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 536; + vrLoc = 0; + }; + 6E90BE5405F86D3200857F22 = { + fRef = 6E0D40B4052243D500A80003; + isa = PBXTextBookmark; + name = "PreferenceController.h: updateAutomaticallyButton"; + rLen = 0; + rLoc = 613; + rType = 0; + vrLen = 974; + vrLoc = 106; + }; + 6E90C09A05FA7EA900857F22 = { + fRef = 6E1E43700588275100526509; isa = PBXBookmark; }; - 6E90C17C05FAA6C400857F22 = { - fRef = 6E4E098E050BB21400A80003; + 6E90C09D05FA7EAA00857F22 = { + fRef = 6E0BDF7D0511568D00A80003; isa = PBXTextBookmark; - name = "- (void)firstSearchIntegerLong:(int32_t)value\n{\n\tkern_return_t\t\t\t\tresult;\n\t\n\tvm_address_t\t\t\t\taddress = 0x0;\n\tvm_size_t\t\t\t\t\tsize = 0;\n\tvm_region_basic_info_data_t\tinfo;\n\tmach_msg_type_number_t\t\tinfoCnt = 8;\n\tmach_port_t\t\t\t\t\tobject_name = 0;\n\t\n\tint32_t\t\t\t\t\t\t*data;\n\tvm_size_t\t\t\t\t\tdataLength;\n\t\n\tTCaddress\t\t\t\t\t*results = NULL;\n\tint\t\t\t\t\t\t\tresultsAmount = 0;\n\t\n\t/*unsigned\t\t\t\t\tzone_count = 10;\n\tvm_address_t\t\t\t\t*zones = (vm_address_t *)malloc( zone_count * sizeof(vm_address_t) );\n\t//memory_reader_t\t\t\t\treader;\n\t\n\tif ( (result = malloc_get_all_zones( processTask, NULL, &zones, &zone_count )) != KERN_SUCCESS )\n\t{\n\t\tNSLog( @\"malloc_get_all_zones error: %i\", result );\n\t}\n\telse\n\t{\n\t\t//address = zones[0];\n\t\t\n\t\tint\t\t\ti;\n\t\t\n\t\tfor ( i = 0; i < 10; i++ )\n\t\t{\n\t\t\tNSLog( @\"malloc_get_all_zones[%i] = %X\", i, (vm_address_t)zones[i] );\n\t\t}\n\t}*/\n\t\n\tfor (;;)\n\t{\n\t\tif ( (result = vm_region( processTask, &address, &size, VM_REGION_BASIC_INFO, (vm_region_info_t)(&info), &infoCnt, &object_name )) != KERN_SUCCESS )\n\t\t{\n\t\t\tif ( result != KERN_INVALID_ADDRESS )\n\t\t\t{\n\t\t\t\tNSLog( @\"vm_region returned error: %i\", result );\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\t\n\t\tif ( (info.protection & VM_PROT_READ) && (info.protection & VM_PROT_WRITE) )\n\t\t{\n\t\t\tdata = (int32_t *)malloc( size );\n\t\t\tdataLength = size;\n\t\t\t\n\t\t\tNSLog( @\"address: %.8X size: %i\", address, size );\n\t\t\t\n\t\t\tif ( (result = vm_read_overwrite( processTask, address, size, (vm_address_t)data, &dataLength )) != KERN_SUCCESS && result != KERN_PROTECTION_FAILURE )\n\t\t\t{\n\t\t\t\tNSLog( @\"vm_read_overwrite returned error: %i\", result );\n\t\t\t\tfree( data );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\tif ( result == KERN_SUCCESS )\n\t\t\t{\n\t\t\t\tint\t\t\t\ti, top = dataLength / sizeof(value);\n\t\t\t\t\n\t\t\t\tif ( (results = (TCaddress *)realloc( results, TCAddressSize*resultsAmount + dataLength )) == NULL )\n\t\t\t\t{\n\t\t\t\t\tNSLog( @\"ERROR: could not expand buffer\" );\n\t\t\t\t\texit(0);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfor ( i = 0; i < top; i++ )\n\t\t\t\t{\n\t\t\t\t\tif ( *(data+i) == value )\n\t\t\t\t\t{\n\t\t\t\t\t\tresults[resultsAmount++] = (TCaddress)address + i * sizeof(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tfree( data );\n\t\t}\n\t\t\n\t\taddress += size;\n\t}\n\t\n\trealloc( results, TCAddressSize*resultsAmount );\n\t[searchResults addObject:[SearchResults resultsWithType:TYPE_INTEGER size:SIZE_32_BIT data:results amount:resultsAmount]];\n\t\n\tNSLog( @\"found %i of %i\", resultsAmount, value );\n}"; - rLen = 2310; - rLoc = 10655; + name = "cheat_types.h: 23"; + rLen = 0; + rLoc = 504; rType = 0; - vrLen = 839; - vrLoc = 12204; + vrLen = 939; + vrLoc = 0; }; - 6E90C19205FAAA0900857F22 = { - fRef = 6E4E098E050BB21400A80003; + 6E90C09E05FA7EAA00857F22 = { + fRef = 6E0BDF7D0511568D00A80003; isa = PBXTextBookmark; - name = "[self firstSearchString8bit:ptr size:(dataSize - (ptr - data))];"; - rLen = 64; - rLoc = 36909; + name = "cheat_types.h: 23"; + rLen = 0; + rLoc = 504; rType = 0; - vrLen = 647; - vrLoc = 36445; + vrLen = 939; + vrLoc = 0; + }; + 6E90C0DC05FA979F00857F22 = { + fRef = 6E1E43700588275100526509; + isa = PBXBookmark; }; - 6E9D6CEB059429D400D9A2D7 = { + 6E90C16605FAA5FB00857F22 = { + fRef = 6E90C16A05FAA60C00857F22; + isa = PBXTextBookmark; + name = "(null): 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1316; + vrLoc = 3041; + }; + 6E90C16705FAA5FB00857F22 = { + fRef = 6E90C16905FAA60C00857F22; + isa = PBXTextBookmark; + name = "(null): 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1316; + vrLoc = 3041; + }; + 6E90C16905FAA60C00857F22 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = string.h; + path = /usr/include/string.h; + refType = 0; + sourceTree = ""; + }; + 6E90C16A05FAA60C00857F22 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = string.h; + path = /usr/include/string.h; + refType = 0; + sourceTree = ""; + }; + 6E90C28705FAADF700857F22 = { + fRef = 6EF8EC08055A1730008BBE46; + isa = PBXTextBookmark; + name = "Info-The_Cheat.plist: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1004; + vrLoc = 218; + }; + 6E90C2DC05FAAF2700857F22 = { fRef = 089C1660FE840EACC02AAC07; isa = PBXTextBookmark; - name = "English: 5"; + name = "English: 7"; + rLen = 0; + rLoc = 203; + rType = 0; + vrLen = 203; + vrLoc = 0; + }; + 6E90C34005FB0CB300857F22 = { + fRef = 6EF8EC08055A1730008BBE46; + isa = PBXTextBookmark; + name = "Info-The_Cheat.plist: 27"; rLen = 0; - rLoc = 155; + rLoc = 816; rType = 0; - vrLen = 218; + vrLen = 990; + vrLoc = 180; + }; + 6E90C35F05FB0DAD00857F22 = { + fRef = 6E51A97D0573304C00506538; + isa = PBXTextBookmark; + name = "AboutBoxController.m: 20"; + rLen = 0; + rLoc = 456; + rType = 0; + vrLen = 656; vrLoc = 0; }; + 6E90C36C05FC07B100857F22 = { + fRef = 6E51A97C0573304C00506538; + isa = PBXTextBookmark; + name = "AboutBoxController.h: aboutWindow"; + rLen = 0; + rLoc = 414; + rType = 0; + vrLen = 533; + vrLoc = 0; + }; + 6E90C39A05FC0B3600857F22 = { + fRef = 6E51A97D0573304C00506538; + isa = PBXTextBookmark; + name = "AboutBoxController.m: 28"; + rLen = 0; + rLoc = 655; + rType = 0; + vrLen = 646; + vrLoc = 174; + }; 6E9D6CED059429D400D9A2D7 = { fRef = 089C1660FE840EACC02AAC07; isa = PBXTextBookmark; name = "English: 5"; rLen = 0; - rLoc = 155; + rLoc = 141; rType = 0; - vrLen = 218; + vrLen = 199; vrLoc = 0; }; 6EAD5EEA054C3932005761EE = { @@ -1481,12 +2095,11 @@ wantsCodeCompletionTabCompletes = 1; wantsIndex = 1; }; - 6ECC8EE60579AE4A00AA179F = { + 6EBCEEE60523E23700A80003 = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1034, 670}}"; - sepNavSelRange = "{1339, 0}"; - sepNavVisRect = "{{0, 216}, {1034, 408}}"; - sepNavWindowFrame = "{{61, 397}, {750, 558}}"; + sepNavIntBoundsRect = "{{0, 0}, {1002, 587}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRect = "{{0, 0}, {1002, 587}}"; }; }; 6ED3E46305192E2B00A80003 = { @@ -1506,7 +2119,7 @@ 6EF0870C0575382B00B81D60 = { fileReference = 6E4E098E050BB21400A80003; isa = PBXFileBreakpoint; - lineNumber = 351; + lineNumber = 355; state = 1; }; 6EF8EBD9055A1730008BBE46 = { @@ -1517,9 +2130,9 @@ }; 6EF8EC08055A1730008BBE46 = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1034, 710}}"; - sepNavSelRange = "{0, 0}"; - sepNavVisRect = "{{0, 0}, {1034, 710}}"; + sepNavIntBoundsRect = "{{0, 0}, {1002, 671}}"; + sepNavSelRange = "{816, 0}"; + sepNavVisRect = "{{0, 79}, {1002, 592}}"; }; }; 6EF8EC0A055A1730008BBE46 = { diff --git a/The Cheat.pbproj/project.pbxproj b/The Cheat.pbproj/project.pbxproj index 323eb4f..70235de 100644 --- a/The Cheat.pbproj/project.pbxproj +++ b/The Cheat.pbproj/project.pbxproj @@ -35,10 +35,12 @@ //104 1058C7A6FEA54F5311CA2CBB = { children = ( + 6E90BC2805F7FB9000857F22, 1058C7A7FEA54F5311CA2CBB, ); isa = PBXGroup; name = "Linked Frameworks"; + path = ""; refType = 4; sourceTree = ""; }; @@ -58,6 +60,7 @@ ); isa = PBXGroup; name = "Other Frameworks"; + path = ""; refType = 4; sourceTree = ""; }; @@ -116,10 +119,8 @@ 6ED3E46705192F0C00A80003, 2A37F4AFFDCFA73011CA2CEA, 2A37F4B8FDCFA73011CA2CEA, - 2A37F4C3FDCFA73011CA2CEA, - 6ECC8E600579A3DC00AA179F, + 6E8EE12505F7EA8100ED3F4F, 19C28FB0FE9D524F11CA2CBB, - 6EF8EC08055A1730008BBE46, ); isa = PBXGroup; name = "The Cheat"; @@ -160,7 +161,6 @@ }; 2A37F4AFFDCFA73011CA2CEA = { children = ( - 6ECC8EE60579AE4A00AA179F, 32DBCF750370BD2300C91783, 2A37F4B0FDCFA73011CA2CEA, 6E51A986057330B900506538, @@ -223,6 +223,7 @@ }; 2A37F4B8FDCFA73011CA2CEA = { children = ( + 6E8DD52805FC4EB600D2C0EA, 6E1E43700588275100526509, 2A37F4B6FDCFA73011CA2CEA, 6E51A97605732B9000506538, @@ -230,7 +231,7 @@ 6E0D40B005223D4E00A80003, 2A37F4B4FDCFA73011CA2CEA, 089C165FFE840EACC02AAC07, - 6E3309E10575BA9D0093550E, + 6EF8EC08055A1730008BBE46, ); isa = PBXGroup; name = Resources; @@ -238,17 +239,6 @@ refType = 4; sourceTree = ""; }; - 2A37F4C3FDCFA73011CA2CEA = { - children = ( - 1058C7A6FEA54F5311CA2CBB, - 1058C7A8FEA54F5311CA2CBB, - ); - isa = PBXGroup; - name = Frameworks; - path = ""; - refType = 4; - sourceTree = ""; - }; 2A37F4C4FDCFA73011CA2CEA = { fallbackIsa = PBXFileReference; isa = PBXFrameworkReference; @@ -516,19 +506,6 @@ settings = { }; }; - 6E3309E10575BA9D0093550E = { - isa = PBXFileReference; - lastKnownFileType = image.pdf; - path = "Read Me.pdf"; - refType = 4; - sourceTree = ""; - }; - 6E3309E30575BA9D0093550E = { - fileRef = 6E3309E10575BA9D0093550E; - isa = PBXBuildFile; - settings = { - }; - }; 6E3F0D01050D4ACC00A80003 = { fileEncoding = 4; isa = PBXFileReference; @@ -673,6 +650,75 @@ refType = 4; sourceTree = ""; }; + 6E8DD52305FC4EA100D2C0EA = { + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 7; + files = ( + 6E8DD52D05FC4EC100D2C0EA, + ); + isa = PBXCopyFilesBuildPhase; + runOnlyForDeploymentPostprocessing = 0; + }; + 6E8DD52805FC4EB600D2C0EA = { + isa = PBXFileReference; + lastKnownFileType = text.rtf; + path = "Read Me.rtf"; + refType = 4; + sourceTree = ""; + }; + 6E8DD52905FC4EB600D2C0EA = { + fileRef = 6E8DD52805FC4EB600D2C0EA; + isa = PBXBuildFile; + settings = { + }; + }; + 6E8DD52D05FC4EC100D2C0EA = { + fileRef = 6E8DD52805FC4EB600D2C0EA; + isa = PBXBuildFile; + settings = { + }; + }; + 6E8EE12505F7EA8100ED3F4F = { + children = ( + 1058C7A6FEA54F5311CA2CBB, + 1058C7A8FEA54F5311CA2CBB, + ); + isa = PBXGroup; + name = "Frameworks & Libraries"; + refType = 4; + sourceTree = ""; + }; + 6E90BC2805F7FB9000857F22 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = Chaz.framework; + path = /Users/chaz/Projects/Chaz/build/Chaz.framework; + refType = 0; + sourceTree = ""; + }; + 6E90BC2905F7FB9000857F22 = { + fileRef = 6E90BC2805F7FB9000857F22; + isa = PBXBuildFile; + settings = { + }; + }; + 6E90BC3305F7FB9F00857F22 = { + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 6E90BC3A05F7FBFC00857F22, + ); + isa = PBXCopyFilesBuildPhase; + runOnlyForDeploymentPostprocessing = 0; + }; + 6E90BC3A05F7FBFC00857F22 = { + fileRef = 6E90BC2805F7FB9000857F22; + isa = PBXBuildFile; + settings = { + }; + }; 6EAF23070527D7DB00A80003 = { children = ( 6EAF23080527D7FE00A80003, @@ -709,44 +755,6 @@ refType = 4; sourceTree = ""; }; - 6ECC8E600579A3DC00AA179F = { - children = ( - 6ECC8EE40579AE4400AA179F, - ); - isa = PBXGroup; - name = Libraries; - refType = 4; - sourceTree = ""; - }; - 6ECC8EE40579AE4400AA179F = { - isa = PBXFileReference; - lastKnownFileType = archive.ar; - name = libchaz.a; - path = /Users/chaz/Projects/LibChaz/build/libchaz.a; - refType = 0; - sourceTree = ""; - }; - 6ECC8EE50579AE4400AA179F = { - fileRef = 6ECC8EE40579AE4400AA179F; - isa = PBXBuildFile; - settings = { - }; - }; - 6ECC8EE60579AE4A00AA179F = { - fileEncoding = 30; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.h; - name = chaz.h; - path = /Users/chaz/Projects/LibChaz/build/chaz.h; - refType = 0; - sourceTree = ""; - }; - 6ECC8EE70579AE4A00AA179F = { - fileRef = 6ECC8EE60579AE4A00AA179F; - isa = PBXBuildFile; - settings = { - }; - }; 6ED3E46305192E2B00A80003 = { fileEncoding = 4; isa = PBXFileReference; @@ -779,11 +787,13 @@ 6EF8EBEE055A1730008BBE46, 6EF8EBF7055A1730008BBE46, 6EF8EC05055A1730008BBE46, + 6E90BC3305F7FB9F00857F22, + 6E8DD52305FC4EA100D2C0EA, ); buildRules = ( ); buildSettings = { - FRAMEWORK_SEARCH_PATHS = ""; + FRAMEWORK_SEARCH_PATHS = /Users/chaz/Projects/Chaz/build; GCC_C_LANGUAGE_STANDARD = "compiler-default"; GCC_ENABLE_ASM_KEYWORD = YES; GCC_ENABLE_CPP_EXCEPTIONS = NO; @@ -793,9 +803,9 @@ GCC_WARN_FOUR_CHARACTER_CONSTANTS = NO; GCC_WARN_UNKNOWN_PRAGMAS = NO; HEADER_SEARCH_PATHS = ""; - INFOPLIST_FILE = "Info-The_Cheat__Upgraded_.plist"; + INFOPLIST_FILE = "Info-The_Cheat.plist"; INSTALL_PATH = "$(HOME)/Applications"; - LIBRARY_SEARCH_PATHS = "\"/Users/chaz/Projects/The Cheat\" /Users/chaz/Projects/LibChaz/build"; + LIBRARY_SEARCH_PATHS = "\"/Users/chaz/Projects/The Cheat\""; MACOSX_DEPLOYMENT_TARGET = 10.2; OTHER_CFLAGS = ""; OTHER_LDFLAGS = ""; @@ -838,7 +848,6 @@ 6EF8EBED055A1730008BBE46, 6E51A9800573304C00506538, 6E51A98A057330B900506538, - 6ECC8EE70579AE4A00AA179F, ); isa = PBXHeadersBuildPhase; runOnlyForDeploymentPostprocessing = 0; @@ -966,8 +975,8 @@ 6EF8EBF3055A1730008BBE46, 6EF8EBF4055A1730008BBE46, 6E51A97905732B9000506538, - 6E3309E30575BA9D0093550E, 6E1E43710588275100526509, + 6E8DD52905FC4EB600D2C0EA, ); isa = PBXResourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; @@ -1110,7 +1119,7 @@ buildActionMask = 2147483647; files = ( 6EF8EC06055A1730008BBE46, - 6ECC8EE50579AE4400AA179F, + 6E90BC2905F7FB9000857F22, ); isa = PBXFrameworksBuildPhase; runOnlyForDeploymentPostprocessing = 0; @@ -1123,8 +1132,8 @@ }; 6EF8EC08055A1730008BBE46 = { isa = PBXFileReference; - lastKnownFileType = text.plist; - path = "Info-The_Cheat__Upgraded_.plist"; + lastKnownFileType = text.plist.xml; + path = "Info-The_Cheat.plist"; refType = 4; sourceTree = ""; }; diff --git a/cheat_globals.h b/cheat_globals.h index 03bad61..f50a0e9 100644 --- a/cheat_globals.h +++ b/cheat_globals.h @@ -13,12 +13,12 @@ #import -#define TCDefaultListenPort (5007) +#define TCDefaultListenPort (51835) //#define TCDefaultListenPath "/tmp/com.brokenzipper.TheCheat" // this path alone would work, but it *should* go in the user's home directory char extern TCDefaultListenPath[104]; -#define TCMaxSearchResults (100000) +//#define TCMaxSearchResults (100) int extern TCGlobalDocumentCount; int extern TCGlobalAlternateBroadcastNameCount; @@ -26,15 +26,19 @@ char extern TCGlobalListening; char extern TCGlobalPlaySounds; char extern TCGlobalWindowsOnTop; +char extern TCGlobalUpdateCheck; char extern TCGlobalAllowRemote; int extern TCGlobalListenPort; #define TCGlobalBroadcastName ([[NSUserDefaults standardUserDefaults] objectForKey:TCBroadcastNamePref]) +int extern TCGlobalHitsDisplayed; NSString extern *TCPlaySoundsPref; NSString extern *TCWindowsOnTopPref; +NSString extern *TCUpdateCheckPref; NSString extern *TCAllowRemotePref; NSString extern *TCListenPortPref; NSString extern *TCBroadcastNamePref; +NSString extern *TCHitsDisplayedPref; #endif diff --git a/cheat_globals.m b/cheat_globals.m index 7c04b96..dab3acb 100644 --- a/cheat_globals.m +++ b/cheat_globals.m @@ -18,11 +18,15 @@ char TCGlobalListening = NO; char TCGlobalPlaySounds = YES; char TCGlobalWindowsOnTop = NO; +char TCGlobalUpdateCheck = NO; char TCGlobalAllowRemote = NO; int TCGlobalListenPort = TCDefaultListenPort; +int TCGlobalHitsDisplayed = 1000; NSString *TCPlaySoundsPref = @"TCPlaySoundsPref"; NSString *TCWindowsOnTopPref = @"TCWindowsOnTopPref"; +NSString *TCUpdateCheckPref = @"TCUpdateCheckPref"; NSString *TCAllowRemotePref = @"TCAllowRemotePref"; NSString *TCListenPortPref = @"TCListenPortPref"; -NSString *TCBroadcastNamePref = @"TCBroadcastNamePref"; \ No newline at end of file +NSString *TCBroadcastNamePref = @"TCBroadcastNamePref"; +NSString *TCHitsDisplayedPref = @"TCHitsDisplayedPref"; \ No newline at end of file diff --git a/cheat_shared.m b/cheat_shared.m index 1a7b7a5..48062c2 100644 --- a/cheat_shared.m +++ b/cheat_shared.m @@ -18,5 +18,5 @@ void LaunchWebsite() void LaunchEmail() { - [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"mailto:chaz@brokenzipper.com?subject=The%20Cheat%20Feedback"]]; + [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"mailto:thecheat@brokenzipper.com?subject=The%20Cheat%20Feedback"]]; } \ No newline at end of file diff --git a/icon.icns b/icon.icns index f941168..fa0c1d0 100644 Binary files a/icon.icns and b/icon.icns differ