| 
			
				|  | Cheat Engine The Official Site of Cheat Engine
 
 
 |  
 
	
		| View previous topic :: View next topic |  
		| Author | Message |  
		| IceTeaMan Newbie cheater
 
 ![]() Reputation: 1 
 Joined: 23 Jul 2011
 Posts: 19
 
 
 | 
			
				|  Posted: Sat Jul 23, 2011 4:52 pm    Post subject: New to Cheat Engine |   |  
				| 
 |  
				| I know of an easy way to find all the Weapons in any zone/chapter of Fear 3 I know how to set Infinite Ammo & No Reload on any of these weapons with out fear of crashing the game.
 
 What I need help with, is getting Cheat Engine to create a Trainer to do this instead of manually changing the values.
 
 In a nut shell, I search fear 3 process for Text string Reload_State
 I then look at each address -74h for a Text string (see list below)
 Assault_Rifle
 CAS
 Handgun
 SMG
 Sniper
 UZI
 RocketLauncher
 Flechette
 
 if the address -74h has one of these strings at -74h it's one of the 2 weapons equiped or one that can be picked up in this zone.
 if -74h does have one of these strings skip that address
 
 Reload_State = address found
 Reload_State - 74h = weapon type
 Reload_State -12Ch = spare ammo low ammo trigger
 Reload_State -130h = loaded low ammo warning trigger
 Reload_State -134h = 01h = Reload 00h = no reload
 Reload_State -138h = spare ammo (max = max clip ammo times max clips)
 Reload_State -140h = max clips you can carry
 Reload_State -144h = loaded ammo
 Reload_State -150h = max ammo per clip
 
 Once I know that -74h is a weapon I can edit -134h to 00h to give no reload for that weapon
 
 I never need to change any ammo value risking a game crash
 game crashes happen when values listed above don't match up  q:
 
 Is there a way to write a LUA script to search for Reload_State
 then search -74 for weapons type & if true
 edit -134h to 00
 & do this with each address found?
 
 if so I can then create a trainer that will enable Infinite Ammo with Infinite Symbol displayed on screen inplace of spare ammo value  q:
 Along with setting all Weapons to No Reload or setting weapons by type to these values
 
 Thanks for any help given
 |  |  
		| Back to top |  |  
		|  |  
		| Dark Byte Site Admin
 
  Reputation: 470 
 Joined: 09 May 2003
 Posts: 25807
 Location: The netherlands
 
 | 
			
				|  Posted: Sat Jul 23, 2011 7:17 pm    Post subject: |   |  
				| 
 |  
				| easiest method: Convert the text "Reload_State" to an array of byte and use lua's AOBScan function 
 then traverse the list and for each address use readString(address-offset, charcount) and check if the string is what it should be
 
 if not, try another result of the aobscan...
 
 alternatively, use the MemScan and FoundList classes for full blown CE memory scanning, but I really suggest you try the aobscan method first
 
 Currently don't have much time to write this whole script for you, but look up these functions and experiment, and ask specific questions. Or someone else can implement this
 _________________
 
 Do not ask me about online cheats. I don't know any and wont help finding them.
 Like my help? Join me on Patreon so i can keep helping
 |  |  
		| Back to top |  |  
		|  |  
		| atom0s Moderator
 
  Reputation: 205 
 Joined: 25 Jan 2006
 Posts: 8587
 Location: 127.0.0.1
 
 | 
			
				|  Posted: Sat Jul 23, 2011 8:32 pm    Post subject: |   |  
				| 
 |  
				| Here's a function I wrote to convert a string to its bytes: 
 
  	  | Code: |  	  | function string.tobytes( str )
 if str == nil then return nil; end
 
 local end_string = "";
 
 for n = 1, #str do
 local sChar = string.sub( str, n, n );
 local sByte = string.byte( sChar );
 end_string = end_string .. string.format( '%02X', sByte );
 if n ~= #str then end_string = end_string .. ' '; end;
 end
 
 return end_string;
 end
 
 | 
 
 Which you can use like this:
 
  	  | Code: |  	  | local str = string.tobytes( 'Reload_State' ); | 
 
 
 Edit --
 
 
 Here's a bit more in depth example, I'm using winmine.exe as my test since I don't have Fear so you can change winmine.exe to fear3.exe or whatever the executable is called:
 
 
  	  | Code: |  	  | function string.tobytes( str )
 if str == nil then return nil; end
 
 local end_string = "";
 
 for n = 1, #str do
 local sChar = string.sub( str, n, n );
 local sByte = string.byte( sChar );
 end_string = end_string .. string.format( '%02X', sByte );
 if n ~= #str then end_string = end_string .. ' '; end;
 end
 
 return end_string;
 end
 
 -- Set process..
 local autoattach = getAutoAttachList();
 strings_add( autoattach, 'winmine.exe' ); -- Add your process here..
 
 -- Scan for word..
 local scan = AOBScan( string.tobytes( 'Minesweeper' ) );
 if scan ~= nil and strings_getCount( scan ) > 0 then
 local scan_num = strings_getCount( scan );
 for n = 0, scan_num - 1 do
 local addr = strings_getString( scan, n );
 print( addr ); -- SEE BELOW!!
 end
 object_destroy( scan );
 end
 
 | 
 
 The line I marked 'SEE BELOW!!' is where you will have the ability to use the scan results. addr contains the current address found within the scan's stringlist.
 
 You can adjust the address to the -74h there and read the bytes at the new address to compare to the other strings and such. Be sure that object_destroy gets called on the scan results though.
 _________________
 
 - Retired. |  |  
		| Back to top |  |  
		|  |  
		| IceTeaMan Newbie cheater
 
 ![]() Reputation: 1 
 Joined: 23 Jul 2011
 Posts: 19
 
 
 | 
			
				|  Posted: Sun Jul 24, 2011 12:44 am    Post subject: |   |  
				| 
 |  
				| The script works great & will return the same 34 address that I get with a text search in cheat engine for Reload_State now I just have to work out the rest of it & I'm good to go
 
 Thanks
 |  |  
		| Back to top |  |  
		|  |  
		| IceTeaMan Newbie cheater
 
 ![]() Reputation: 1 
 Joined: 23 Jul 2011
 Posts: 19
 
 
 | 
			
				|  Posted: Mon Jul 25, 2011 12:28 am    Post subject: |   |  
				| 
 |  
				| I might be in over my head with this, so I'll give the info needed to set Infinite Ammo with Infinite Symbol displayed on the screen in hopes someone can use it. From Reload_State -158h you should see the byte 69h or 68h (sometimes on a handgun it will be 2Fh) change that byte to 2Ah to enable the ingame Infinite Ammo & display the Infinite Symbol in place of the spare ammo value.
 the game will not allow you to set this value back to the normal value!
 
 Also you might want to try changing Reload_State -14Ch the byte is normally set to 01h  changing that byte to 00h will cause that weapons loaded ammo to drop to 0 & reload an empty clip, each time the weapon is fired after that it will reload an empty clip, doesn't matter how much spare ammo the weapon has q:
 Always a good joke to play on a frirend/roommate
 setting that byte to 02h will force a double reload giving the weapon twice the normal ammo. setting to 03h or higher has the same effect as 02h only double reload.
 |  |  
		| Back to top |  |  
		|  |  
		| IceTeaMan Newbie cheater
 
 ![]() Reputation: 1 
 Joined: 23 Jul 2011
 Posts: 19
 
 
 | 
			
				|  Posted: Wed Jul 27, 2011 3:38 am    Post subject: |   |  
				| 
 |  
				| I don't really need to convert the String to bytes, so this will work 
 
  	  | Code: |  	  | local autoattach = getAutoAttachList();
 strings_add( autoattach, 'F.E.A.R. 3.exe' );
 
 local scan = AOBScan( "52 65 6C 6F 61 64 5F 53 74 61 74 65" );
 if scan ~= nil and strings_getCount( scan ) > 0 then
 local scan_num = strings_getCount( scan );
 for n = 0, scan_num - 1 do
 local addr = strings_getString( scan, n );
 print( addr );
 print ( readString( 0x0509FDF0 -0x74, 0x4 ) );
 end
 object_destroy( scan );
 end
 
 | 
 
 I know that 0509FDF0 is the first address returned & I know it's a Handgun
 The above code will return
 0509FDF0
 Han
 
 how do I prefex addr with 0x so that I can check each address found?
 
 all I need to look at is the first 3 bytes for the different weapon types
 Assault_Rifle
 CAS
 Flechette
 Handgun
 RocketLauncher
 SMG
 Sniper
 UZI
 |  |  
		| Back to top |  |  
		|  |  
		| Dark Byte Site Admin
 
  Reputation: 470 
 Joined: 09 May 2003
 Posts: 25807
 Location: The netherlands
 
 | 
			
				|  Posted: Wed Jul 27, 2011 9:13 am    Post subject: |   |  
				| 
 |  
				| tip: you can also do:
 print ( readString( "0509FDF0-74", 4 ) )
 
 and also:
 readString( addr.."-74", 4 )
 
 but if you really want it as a number:
 addr= tonumber( "0x" .. addr );
 _________________
 
 Do not ask me about online cheats. I don't know any and wont help finding them.
 Like my help? Join me on Patreon so i can keep helping
 |  |  
		| Back to top |  |  
		|  |  
		| IceTeaMan Newbie cheater
 
 ![]() Reputation: 1 
 Joined: 23 Jul 2011
 Posts: 19
 
 
 | 
			
				|  Posted: Wed Jul 27, 2011 12:02 pm    Post subject: |   |  
				| 
 |  
				| thanks print ( readString( addr.."-74", 4 ) );
 works fine & keeps things simple
 
 
  	  | Code: |  	  | local autoattach = getAutoAttachList();
 strings_add( autoattach, 'F.E.A.R. 3.exe' );
 
 local scan = AOBScan( "52 65 6C 6F 61 64 5F 53 74 61 74 65" );
 if scan ~= nil and strings_getCount( scan ) > 0 then
 local scan_num = strings_getCount( scan );
 for n = 0, scan_num - 1 do
 local addr = strings_getString( scan, n );
 print( addr );
 print ( readString( addr.."-74", 4 ) );
 end
 object_destroy( scan );
 end
 
 | 
 
 this code will filter out address that are not weapons
 
 
  	  | Code: |  	  | local autoattach = getAutoAttachList();
 strings_add( autoattach, 'F.E.A.R. 3.exe' );
 
 local scan = AOBScan( "52 65 6C 6F 61 64 5F 53 74 61 74 65" );
 if scan ~= nil and strings_getCount( scan ) > 0 then
 local scan_num = strings_getCount( scan );
 for n = 0, scan_num - 1 do
 local addr = strings_getString( scan, n );
 if ( readString( addr.."-74", 4 ) ) == "Ass"
 then print (addr.."   Assault Rifle");
 elseif ( readString( addr.."-74", 4 ) ) == "CAS"
 then print (addr.."   Combat Assault Shotgun");
 elseif ( readString( addr.."-74", 4 ) ) == "Fle"
 then print (addr.."   Flechette");
 elseif ( readString( addr.."-74", 4 ) ) == "Han"
 then print (addr.."   Handgun");
 elseif ( readString( addr.."-74", 4 ) ) == "Roc"
 then print (addr.."   Rocket Launcher");
 elseif ( readString( addr.."-74", 4 ) ) == "SMG"
 then print (addr.."   Submachine gun");
 elseif ( readString( addr.."-74", 4 ) ) == "Sni"
 then print (addr.."   Sniper Rifle");
 elseif ( readString( addr.."-74", 4 ) ) == "UZI"
 then print (addr.."   Dual UZI's");
 elseif  print (addr.."   skip over") then
 end
 end
 object_destroy( scan );
 end
 
 | 
 
 each address is flagged by weapons type or flagged skip over
 now just have to edit 1 byte at two offsets to enable:
 Infinite Ammo -158h  set to 2Ah to enable
 No Reload      -134h set to 00h to enable
 for listed weapons
 effects will follow weapon from zone to zone until you reload checkpoint/restrat mission or exit game (game does not save cheats).
 if a new weapon is droped by an NPC that's not enabled, just run script again
 |  |  
		| Back to top |  |  
		|  |  
		| IceTeaMan Newbie cheater
 
 ![]() Reputation: 1 
 Joined: 23 Jul 2011
 Posts: 19
 
 
 | 
			
				|  Posted: Thu Jul 28, 2011 1:53 pm    Post subject: |   |  
				| 
 |  
				| How do I write a byte to the process memory with a lua script? 
 writeByte( addr.."-158", "2A" )
 
 gives an error if add to the script above
 |  |  
		| Back to top |  |  
		|  |  
		| Dark Byte Site Admin
 
  Reputation: 470 
 Joined: 09 May 2003
 Posts: 25807
 Location: The netherlands
 
 | 
			
				|  Posted: Thu Jul 28, 2011 2:02 pm    Post subject: |   |  
				| 
 |  
				| try writeBytes(addr.."-158", 0x2a)
 _________________
 
 Do not ask me about online cheats. I don't know any and wont help finding them.
 Like my help? Join me on Patreon so i can keep helping
 |  |  
		| Back to top |  |  
		|  |  
		| atom0s Moderator
 
  Reputation: 205 
 Joined: 25 Jan 2006
 Posts: 8587
 Location: 127.0.0.1
 
 | 
			
				|  Posted: Thu Jul 28, 2011 3:06 pm    Post subject: |   |  
				| 
 |  
				| Just a heads up, rather then reading multiple times, you should read once and use a local variable to do your if checks. 
 Like:
 
  	  | Code: |  	  | for n = 0, scan_num - 1 do
 local addr = strings_getString( scan, n );
 local val  = readString( addr .. "-74", 4 );
 
 if val == "Ass" then print( 'Assault rifle' );
 elseif val == "CAS" then print( 'Combat Assault Shotgun' );
 elseif val == "Fle" then print( 'Flechette' );
 elseif val == "Han" then print( 'Handgun' );
 elseif val == "Roc" then print( 'Rocket Launcher' );
 elseif val == "SMG" then print( 'Submachine Gun' );
 elseif val == "Sni" then print( 'Sniper Rifle' );
 elseif val == "UZI" then print( 'Dual UZIs' );
 else
 print( addr .. ': was skipped over' );
 end
 end
 
 | 
 _________________
 
 - Retired. |  |  
		| Back to top |  |  
		|  |  
		| IceTeaMan Newbie cheater
 
 ![]() Reputation: 1 
 Joined: 23 Jul 2011
 Posts: 19
 
 
 | 
			
				|  Posted: Thu Jul 28, 2011 3:16 pm    Post subject: |     |  
				| 
 |  
				| thanks that worked knew it had to be something simple that I was over looking
 
 This Lua script will set all weapons* to Inifinite Ammo & No Reload for
 Retail steam single player Fear 3
 Thanks to Dark Byte & Wiccaan for there help in writing this Script
 
  	  | Code: |  	  | local autoattach = getAutoAttachList();
 strings_add( autoattach, 'F.E.A.R. 3.exe' );
 
 local scan = AOBScan( "52 65 6C 6F 61 64 5F 53 74 61 74 65" );
 if scan ~= nil and strings_getCount( scan ) > 0 then
 local scan_num = strings_getCount( scan );
 for n = 0, scan_num - 1 do
 local addr = strings_getString( scan, n );
 if ( readString( addr.."-74", 4 ) ) == "Ass"
 then print (addr.."   Assault Rifle   "..( readString( addr.."-158", 2 ) ) );
 writeBytes( addr.."-134", 0x00)
 writeBytes( addr.."-158", 0x2a)
 elseif ( readString( addr.."-74", 4 ) ) == "CAS"
 then print (addr.."   Combat Assault Shotgun   "..( readString( addr.."-158", 2 ) ) );
 writeBytes( addr.."-134", 0x00)
 writeBytes( addr.."-158", 0x2a)
 elseif ( readString( addr.."-74", 4 ) ) == "Fle"
 then print (addr.."   Flechette   "..( readString( addr.."-158", 2 ) ) );
 writeBytes( addr.."-134", 0x00)
 writeBytes( addr.."-158", 0x2a)
 elseif ( readString( addr.."-74", 4 ) ) == "Han"
 then print (addr.."   Handgun   "..( readString( addr.."-158", 2 ) ) );
 writeBytes( addr.."-134", 0x00)
 writeBytes( addr.."-158", 0x2a)
 elseif ( readString( addr.."-74", 4 ) ) == "Roc"
 then print (addr.."   Rocket Launcher   "..( readString( addr.."-158", 2 ) ) );
 writeBytes( addr.."-134", 0x00)
 writeBytes( addr.."-158", 0x2a)
 elseif ( readString( addr.."-74", 4 ) ) == "SMG"
 then print (addr.."   Submachine gun   "..( readString( addr.."-158", 2 ) ) );
 writeBytes( addr.."-134", 0x00)
 writeBytes( addr.."-158", 0x2a)
 elseif ( readString( addr.."-74", 4 ) ) == "Sni"
 then print (addr.."   Sniper Rifle   "..( readString( addr.."-158", 2 ) ) );
 writeBytes( addr.."-134", 0x00)
 writeBytes( addr.."-158", 0x2a)
 elseif ( readString( addr.."-74", 4 ) ) == "UZI"
 then print (addr.."   Dual UZI's   "..( readString( addr.."-158", 2 ) ) );
 writeBytes( addr.."-134", 0x00)
 writeBytes( addr.."-158", 0x2a)
 elseif  print (addr.."   skip over")
 then
 end
 end
 object_destroy( scan );
 end
 
 | 
 
 * weapons list is dinamic & changes as you play/kill npc's/pickup or drop weapons if you encounter a weapon that is not set to Infinite Ammo No Reload
 just run script again
 
 note that droping a weapon set to Infinite Ammo acts the same as droping
 a weapon with 0 ammo. It will disapear.
 equiped weapons should retain the Infinite Ammo No Reload when you change
 zones.
 after running this script 1 time you can turn off Cheat Engine & still have Infinite
 Ammo No Reload on the weapons  q:
 
 the first time you run this script the AutoAttachList window shows a list
 of Addresses where Reload_State was found, weapon type, & a character
 /  *  h  or  i
 these were used in my testing of the script. I left them in because sometimes
 you will note a / or an * those weapons are already set to Infinite Ammo by
 the game  you just need to find them  q;
 |  |  
		| Back to top |  |  
		|  |  
		| IceTeaMan Newbie cheater
 
 ![]() Reputation: 1 
 Joined: 23 Jul 2011
 Posts: 19
 
 
 | 
			
				|  Posted: Fri Jul 29, 2011 9:24 am    Post subject: |   |  
				| 
 |  
				| I've been playing around with this script to find the addresses for the Frag, Flash, & Zap Grenades (not fully tested yet) It should set the grenades to the max you can carry & enable unlimited grenades
 you might have to cycle though the grenades once to update the screen
 The first 3 addresses will be for the ones equiped
 the rest will be the addresses of grenades that can be picked up in the zone
 
 
  	  | Code: |  	  | local autoattach = getAutoAttachList();
 strings_add( autoattach, 'F.E.A.R. 3.exe' );
 
 local scan = AOBScan( "52 65 6C 6F 61 64 5F 53 74 61 74 65" );
 if scan ~= nil and strings_getCount( scan ) > 0 then
 local scan_num = strings_getCount( scan );
 for n = 0, scan_num - 1 do
 local addr = strings_getString( scan, n );
 if ( readString( addr.."-74", 4 ) ) == "Ass"
 then print (addr.."   Assault Rifle   "..( readString( addr.."-158", 2 ) ).."   max ammo per clip 24   max clips "..(readBytes( addr.."-140") ) );
 writeBytes( addr.."-134", 0x00)
 writeBytes( addr.."-144", 0x18)
 writeBytes( addr.."-158", 0x2a)
 elseif ( readString( addr.."-74", 4 ) ) == "CAS"
 then print (addr.."   Combat Assault Shotgun   "..( readString( addr.."-158", 2 ) ).."   max ammo per clip 12   max clips "..(readBytes( addr.."-140") )  );
 writeBytes( addr.."-134", 0x00)
 writeBytes( addr.."-144", 0x0c)
 writeBytes( addr.."-158", 0x2a)
 elseif ( readString( addr.."-74", 4 ) ) == "Fle"
 then print (addr.."   Flechette   "..( readString( addr.."-158", 2 ) ).."   max ammo per clip 12   max clips "..(readBytes( addr.."-140") )  );
 writeBytes( addr.."-134", 0x00)
 writeBytes( addr.."-144", 0x0c)
 writeBytes( addr.."-158", 0x2a)
 elseif ( readString( addr.."-74", 4 ) ) == "Han"
 then print (addr.."   Handgun   "..( readString( addr.."-158", 2 ) ).."   max ammo per clip 12   max clips "..(readBytes( addr.."-140") )  );
 writeBytes( addr.."-134", 0x00)
 writeBytes( addr.."-144", 0x0c)
 writeBytes( addr.."-158", 0x2a)
 elseif ( readString( addr.."-74", 4 ) ) == "Roc"
 then print (addr.."   Rocket Launcher   "..( readString( addr.."-158", 2 ) ).."   max ammo per clip 1   max clips "..(readBytes( addr.."-140") )  );
 writeBytes( addr.."-134", 0x00)
 writeBytes( addr.."-144", 0x01)
 writeBytes( addr.."-158", 0x2a)
 elseif ( readString( addr.."-74", 4 ) ) == "SMG"
 then print (addr.."   Submachine gun   "..( readString( addr.."-158", 2 ) ).."   max ammo per clip 35   max clips "..(readBytes( addr.."-140") )  );
 writeBytes( addr.."-134", 0x00)
 writeBytes( addr.."-144", 0x23)
 writeBytes( addr.."-158", 0x2a)
 elseif ( readString( addr.."-74", 4 ) ) == "Sni"
 then print (addr.."   Sniper Rifle   "..( readString( addr.."-158", 2 ) ).."   max ammo per clip 5   max clips "..(readBytes( addr.."-140") )  );
 writeBytes( addr.."-134", 0x00)
 writeBytes( addr.."-144", 0x5)
 writeBytes( addr.."-158", 0x2a)
 elseif ( readString( addr.."-74", 4 ) ) == "UZI"
 then print (addr.."   Dual UZI's   "..( readString( addr.."-158", 2 ) ).."   max ammo per clip 35   max clips "..(readBytes( addr.."-140") ).."   double values displayed on screen"  );
 writeBytes( addr.."-134", 0x00)
 writeBytes( addr.."-144", 0x23)
 writeBytes( addr.."-158", 0x2a)
 elseif  print (addr.."   skip over")
 then
 end
 end
 object_destroy( scan );
 end
 
 local scan = AOBScan( "02 00 00 00 02 00 00 00 FF FF FF FF" );
 if scan ~= nil and strings_getCount( scan ) > 0 then
 local scan_num = strings_getCount( scan );
 for n = 0, scan_num - 1 do
 local addr1 = strings_getString( scan, n );
 local max1 = ( readBytes( addr1.."+2c") );
 if ( readString( addr1.."+104", 6 ) ) == "FragG"
 then print (addr1.."   Frag Grenade     ".." found "..( readBytes( addr1.."+34") ).."   max allowed is "..( readBytes( addr1.."+2c") ) );
 writeBytes( addr1.."+34", max1)
 writeBytes( addr1.."+44", 0x00)
 elseif ( readString( addr1.."+104", 6 ) ) == "Flash"
 then print (addr1.."   Flash Grenade   ".." found "..( readBytes( addr1.."+34") ).."   max allowed is "..( readBytes( addr1.."+2c") ) );
 writeBytes( addr1.."+34", max1)
 writeBytes( addr1.."+44", 0x00)
 elseif ( readString( addr1.."+104", 6 ) ) == "Zap_G"
 then print (addr1.."   Zap Grenade   ".." found "..( readBytes( addr1.."+34") ).."   max allowed is "..( readBytes( addr1.."+2c") ) );
 writeBytes( addr1.."+34", max1)
 writeBytes( addr1.."+44", 0x00)
 end
 end
 object_destroy( scan );
 end
 | 
 
 (after a bit of testing, made a few changes to script for grenades)
 
 is there any easy way to combine the first 2 searches into 1 search?
 only the first character is different.
 if I leave the first charter off, the search will give the same results as all 3 searches but made it harder to tell the address for equiped grenades
 |  |  
		| Back to top |  |  
		|  |  
		| IceTeaMan Newbie cheater
 
 ![]() Reputation: 1 
 Joined: 23 Jul 2011
 Posts: 19
 
 
 | 
			
				|  Posted: Sat Aug 06, 2011 4:38 am    Post subject: |   |  
				| 
 |  
				| this script finds the second address of two address for the Phase Beam 
 
  	  | Code: |  	  | local autoattach = getAutoAttachList();
 strings_add(autoattach, 'F.E.A.R. 3.exe');
 
 local scan = AOBScan("00000000FFFFFFFF34");
 if scan ~= nil and strings_getCount(scan) > 0 then
 local scan_num = strings_getCount(scan);
 for n = 0, scan_num - 1 do
 local addr2 = strings_getString(scan, n);
 if (readString(addr2.."+17", 2)) == "?"
 then print (addr2.."   Phase Beam   "
 .."   max charge = 3FF0000000000000   "
 .."addr2 +10 = current charge, 8 bytes");
 end
 end
 object_destroy( scan );
 end
 
 | 
 
 what needs to be changed/added to get these values returned in AutoAttachList box?
 
 FFFFFFFF3499CD0603 array of bytes used to find address 1 -- addr2(-295) 9 bytes
 06CDF8D0   Phase Beam address 1 -- first of 2 addresses returned when searching for above array of bytes & is 0C bytes before current charge
 0781D25D   Phase Beam address 2 -- is addr2 & is working in script
 3FF0000000000000 max charge -- addr2(-259) 8 bytes on a x64 system
 3Fxxxxxxxx000000 current charge -- addr2(-289) 8 bytes xxxxxxxx are the only bytes that change when weapon is fired on a x64 system
 
 the 9 byte array & the adresses change every time game is started
 max charge on a x32 system is 3F800000 from what I have been told
 at some point I will install game on a x32 system to check this out & adjust the script to work with both x32 & x64 systems
 |  |  
		| Back to top |  |  
		|  |  
		| IceTeaMan Newbie cheater
 
 ![]() Reputation: 1 
 Joined: 23 Jul 2011
 Posts: 19
 
 
 | 
			
				|  Posted: Sat Aug 06, 2011 9:12 pm    Post subject: |   |  
				| 
 |  
				| still working on the laser weapon, Can now find the addresses for both Phase Beams on the Bridge where the Heavy Mech is. The one that drops on top of the 18 wheeler uses a 64 bit floating point for 1.0
 & the one droped near the Heavy Mech's control room uses a 32 bit floating point for 1.0
 This script will give the addresses for both Phase Beams & change the 32 bit ones charge state from 1.0 to 1000.0 with no ill effects on the game even when changing zones
 
 
  	  | Code: |  	  | local autoattach = getAutoAttachList();
 strings_add(autoattach, 'F.E.A.R. 3.exe');
 
 local scan = AOBScan("52 65 6C 6F 61 64 5F 53 74 61 74 65");
 if scan ~= nil and strings_getCount(scan) > 0 then
 local scan_num = strings_getCount(scan);
 for n = 0, scan_num - 1 do
 local addr = strings_getString(scan, n);
 if ( readString( addr.."-74", 4 ) ) == "Ass"
 then print (addr.."   Assault Rifle   "..(readString(addr
 .."-158", 2)).."   max ammo per clip 24   max clips "
 ..(readBytes(addr.."-140")));
 writeBytes( addr.."-134", 0x00)
 writeBytes( addr.."-144", 0x18)
 writeBytes( addr.."-158", 0x2a)
 elseif ( readString( addr.."-74", 4 ) ) == "CAS"
 then print (addr.."   Combat Assault Shotgun   "..(readString(addr
 .."-158", 2)).."   max ammo per clip 12   max clips "
 ..(readBytes(addr.."-140")));
 writeBytes(addr.."-134", 0x00)
 writeBytes(addr.."-144", 0x0c)
 writeBytes(addr.."-158", 0x2a)
 elseif (readString(addr.."-74", 4)) == "Fle"
 then print (addr.."   Flechette   "..(readString(addr.."-158", 2))
 .."   max ammo per clip 12   max clips "..(readBytes(addr
 .."-140")));
 writeBytes(addr.."-134", 0x00)
 writeBytes(addr.."-144", 0x0c)
 writeBytes(addr.."-158", 0x2a)
 elseif (readString(addr.."-74", 4)) == "Han"
 then print (addr.."   Handgun   "..(readString(addr.."-158", 2))
 .."   max ammo per clip 12   max clips "..(readBytes(addr
 .."-140")));
 writeBytes(addr.."-134", 0x00)
 writeBytes(addr.."-144", 0x0c)
 writeBytes(addr.."-158", 0x2a)
 elseif (readString(addr.."-74", 4)) == "Roc"
 then print (addr.."   Rocket Launcher   "
 ..(readString(addr.."-158", 2))
 .."   max ammo per clip 1   max clips "
 ..(readBytes(addr.."-140")));
 writeBytes(addr.."-134", 0x00)
 writeBytes(addr.."-144", 0x01)
 writeBytes(addr.."-158", 0x2a)
 elseif (readString(addr.."-74", 4)) == "SMG"
 then print (addr.."   Submachine gun   "..(readString(addr.."-158", 2))
 .."   max ammo per clip 35   max clips "..(readBytes(addr
 .."-140")));
 writeBytes(addr.."-134", 0x00)
 writeBytes(addr.."-144", 0x23)
 writeBytes(addr.."-158", 0x2a)
 elseif (readString(addr.."-74", 4)) == "Sni"
 then print (addr.."   Sniper Rifle   "..(readString(addr.."-158", 2))
 .."   max ammo per clip 5   max clips "..(readBytes(addr
 .."-140")));
 writeBytes(addr.."-134", 0x00)
 writeBytes(addr.."-144", 0x5)
 writeBytes(addr.."-158", 0x2a)
 elseif (readString(addr.."-74", 4)) == "UZI"
 then print (addr.."   Dual UZI's   "..(readString(addr.."-158", 2))
 .."   max ammo per clip 35   max clips "..(readBytes(addr
 .."-140")).."   double values displayed on screen");
 writeBytes(addr.."-134", 0x00)
 writeBytes(addr.."-144", 0x23)
 writeBytes(addr.."-158", 0x2a)
 elseif  print (addr.."   skiped over")
 then
 end
 end
 object_destroy(scan);
 end
 
 local scan = AOBScan("02 00 00 00 02 00 00 00 FF FF FF FF");
 if scan ~= nil and strings_getCount(scan) > 0 then
 local scan_num = strings_getCount(scan);
 for n = 0, scan_num - 1 do
 local addr1 = strings_getString(scan, n);
 local max1 = (readBytes(addr1.."+2c"));
 if (readString(addr1.."+104", 6)) == "FragG"
 then print (addr1.."   Frag Grenade     ".." found "..(readBytes(addr1
 .."+34")).."   max allowed is "..(readBytes(addr1.."+2c")));
 writeBytes(addr1.."+34", max1)
 writeBytes(addr1.."+44", 0x00)
 elseif (readString(addr1.."+104", 6)) == "Flash"
 then print (addr1.."   Flash Grenade   ".." found "..(readBytes(addr1
 .."+34")).."   max allowed is "..(readBytes(addr1.."+2c")));
 writeBytes(addr1.."+34", max1)
 writeBytes(addr1.."+44", 0x00)
 elseif (readString(addr1.."+104", 6)) == "Zap_G"
 then print (addr1.."   Zap Grenade   ".." found "..(readBytes(addr1
 .."+34")).."   max allowed is "..(readBytes(addr1.."+2c")));
 writeBytes(addr1.."+34", max1)
 writeBytes(addr1.."+44", 0x00)
 end
 end
 object_destroy( scan );
 end
 local scan = AOBScan("00000000FFFFFFFF34"); -- returns 2 addresses both for same Phase Beam
 if scan ~= nil and strings_getCount(scan) > 0 then
 local scan_num = strings_getCount(scan);
 for n = 0, scan_num - 1 do
 local addr2 = strings_getString(scan, n);
 if (readString(addr2.."+17", 2)) == "?"
 then print (addr2.."   Phase Beam 1   "
 .."   max charge = 3FF0000000000000   "
 .."addr2 +10 = current charge, 8 bytes");
 end
 end
 object_destroy( scan );
 end
 local scan = AOBScan("AA0400000000000100");
 if scan ~= nil and strings_getCount(scan) > 0 then
 local scan_num = strings_getCount(scan);
 for n = 0, scan_num - 1 do
 local addr3 = strings_getString(scan, n);
 if (readString(addr3.."+11", 2)) == "?"
 then print (addr3.."   Phase Beam 2"
 .."   max charge = 3F800000   "
 .."addr3 +0E = current charge, 4 bytes");
 writeBytes(addr3.."+0e", 0x00)
 writeBytes(addr3.."+0f", 0x00)
 writeBytes(addr3.."+10", 0x7a)
 writeBytes(addr3.."+11", 0x44)
 print (addr3.."   Phase Beam charge increased from 1.0 to 1000.0")
 end
 end
 object_destroy( scan );
 end
 local scan = AOBScan("AA0400000100000001");
 if scan ~= nil and strings_getCount(scan) > 0 then
 local scan_num = strings_getCount(scan);
 for n = 0, scan_num - 1 do
 local addr4 = strings_getString(scan, n);
 if (readString(addr4.."+11", 2)) == "?"
 then print (addr4.."   Phase Beam 2"
 .."   max charge = 3F800000   "
 .."addr4 +0E = current charge, 4 bytes");
 writeBytes(addr4.."+0e", 0x00)
 writeBytes(addr4.."+0f", 0x00)
 writeBytes(addr4.."+10", 0x7a)
 writeBytes(addr4.."+11", 0x44)
 print (addr4.."   Phase Beam charge increased from 1.0 to 1000.0")
 end
 end
 object_destroy( scan );
 end
 local scan = AOBScan("20680000000000000040316300");
 if scan ~= nil and strings_getCount(scan) > 0 then
 local scan_num = strings_getCount(scan);
 for n = 0, scan_num - 1 do
 local addr5 = strings_getString(scan, n);
 if (readString(addr5.."+10", 2)) == "?"
 then print (addr5.."    Health floating point   "
 .."   max Health = 3F800000   "
 ..addr5.." +0D = current health, 4 bytes");
 end
 end
 object_destroy( scan );
 end
 | 
 
 add script to find address of Health
 |  |  
		| Back to top |  |  
		|  |  
		|  |  
  
	| 
 
 | You cannot post new topics in this forum You cannot reply to topics in this forum
 You cannot edit your posts in this forum
 You cannot delete your posts in this forum
 You cannot vote in polls in this forum
 You cannot attach files in this forum
 You can download files in this forum
 
 |  |