Jump to content


- - - - -

Free Pascal Trainer Source Code (Race Driver GRID Trainer's Source)

Free Pascal Trainer Source

  • Please log in to reply
No replies to this topic

#1 Renan

Renan

    Experienced Member

  • Donators
  • PipPipPipPipPip
  • 298 posts

Posted 21 August 2011 - 11:33 PM

This is the Race Driver GRID trainer's source code I want to share with you, created by Renan (me).

You can use Dev-Pas 1.9.2.0 to compile this source code.

program Grid_Trainer;

{$MODE FPC}

Uses Windows, CRT;

{$R renan.rs}

Const Hi	: Integer = 7;
	  Key01 : LongInt = $31;
	  Key02 : LongInt = $32;
	  Key03 : LongInt = $33;
	  Key04 : LongInt = $34;
	  Key05 : LongInt = $35;
	  Key06 : LongInt = $36;
	  Key07 : LongInt = $37;
	  Key08 : LongInt = $38;
	  Key09 : LongInt = $23;
	  Key10 : LongInt = $91;
	  SND_ASYNC = 1;
	  SND_MEMORY = 4;
	  SND_RESOURCE = $40004;
	  //Flashback arrays
	  Flash01					   : Array[1..1] of byte = ($E9);
	  AllocWrite01				  : Array[1..9] of byte = ($C7, $41, $14, $00, $00, $00, $00, $C3, $E9);
	  FlashLastNop				  : Array[1..1] of byte = ($90);
	  DesFlash					  : Array[1..5] of byte = ($83, $41, $14, $01, $C3);
	  FlashbackOff				  : Array[1..3] of byte = ($2B, $41, $14);
	  FlashbackOn			   	 : Array[1..3] of byte = ($03, $41, $14);
	  //EndRace arrays
	  EndRace01					 : Array[1..1] of byte = ($E9);
	  EndRace01_03				  : Array[1..2] of byte = ($90, $90);
	  AllocWrite01ER				: Array[1..15] of byte = ($C7, $46, $30, $00, $00, $00, $00, $01, $46, $30, $8B, $4C, $24, $0C, $E9);
	  EndRace_LastNop			   : Array[1..1] of byte = ($90);
	  DesEndRace03				  : Array[1..7] of byte = ($01, $46, $30, $8B, $4C, $24, $0C);
	  //X99 arrays
	  X01						   : Array[1..1] of byte = ($E9);
	  AllocWrite01X99			   : Array[1..13] of byte = ($C7, $41, $24, $00, $00, $60, $40, $F3, $0F, $10, $41, $24, $E9);
	  X02						   : Array[1..1] of byte = ($E9);
	  X02_02						: Array[1..4] of byte = ($90, $90, $90, $90);
	  AllocWrite02X99			   : Array[1..15]of byte = ($C6, $47, $18, $63, $8B, $57, $18, $3B, $96, $CC, $00, $00, $00, $0F, $8C);
	  AllocWrite03X99			   : Array[1..1] of byte = ($E9);
	  XDes01						: Array[1..5] of byte = ($F3, $0F, $10, $41, $24);
	  XDes02						: Array[1..9] of byte = ($8B, $57, $18, $3B, $96, $CC, $00, $00, $00);
	  //EndLeDrift arrays
	  LeDrift01					 : Array[1..1] of byte = ($E9);
	  LeDrift01_Nop				 : Array[1..1] of byte = ($90);
	  AllocWrite01EL				: Array[1..11] of byte = ($C7, $46, $28, $FF, $FF, $FF, $FF, $8B, $56, $24, $E9);
	  LeDrift02					 : Array[1..1] of byte = ($E9);
	  LeDrift02_Nop				 : Array[1..2] of byte = ($90, $90);
	  AllocWrite02EL				: Array[1..12] of byte = ($C7, $46, $30, $FF, $FF, $FF, $FF, $8B, $4C, $24, $0C, $E9);
	  DesLeDrift01				  : Array[1..6] of byte = ($01, $4E, $28, $8B, $56, $24);
	  DesLeDrift02				  : Array[1..7] of byte = ($01, $46, $30, $8B, $4C, $24, $0C);
	  //No Damage arrays
	  Damage01				 : Array[1..6] of byte = ($90, $90, $90, $90, $90, $90);
	  Damage02				 : Array[1..6] of byte = ($90, $90, $90, $90, $90, $90);
	  Damage03				 : Array[1..5] of byte = ($90, $90, $90, $90, $90);
	  Damage04				 : Array[1..6] of byte = ($90, $90, $90, $90, $90, $90);
	  Damage05				 : Array[1..4] of byte = ($90, $90, $90, $90);
	  Damage06				 : Array[1..5] of byte = ($90, $90, $90, $90, $90);
	  DesDamage01			  : Array[1..6] of byte = ($F3, $0F, $11, $44, $81, $18);
	  DesDamage02			  : Array[1..6] of byte = ($F3, $0F, $11, $44, $9E, $18);
	  DesDamage03			  : Array[1..5] of byte = ($F3, $0F, $11, $46, $0C);
	  DesDamage04			  : Array[1..6] of byte = ($F3, $0F, $11, $44, $81, $28);
	  DesDamage05			  : Array[1..4] of byte = ($F3, $0F, $11, $08);
	  DesDamage06			  : Array[1..5] of byte = ($F3, $0F, $11, $4E, $0C);

label Start, HotkeyOn, HotkeyOff;

Function PlaySound(x1: PChar; x2: HMODULE; x3: DWORD): BOOL; stdcall; external 'winmm.dll' name
   {$ifdef UNICODE}'PlaySoundW' {$else}'PlaySoundA' {$endif};

Function VirtualAllocEx(hProcess: THandle; lpAddress: Pointer; dwSize, flAllocationType: DWORD; flProtect: DWORD): Pointer; stdcall; External 'kernel32.dll' Name 'VirtualAllocEx';

procedure Flashback;
var
   Flash01_02					: Pointer;
   AllocBack01				   : Pointer;
   BackTo00697CC5				: Pointer;
   AllocatedMem				  : Pointer;
   ChangeMem					 : WinBOOL;

   Check						 : Array[1..1] of byte;
   GRIDWindow					: HWnd;
   ProcID, ThrID, myRead, myWrite: DWord;
   ProcHandle					: THandle;
   mySize						: Word;
begin
  GRIDWindow := FindWindow('NeonClass_41', 'GRID');
  if GRIDWindow <> 0 then
  begin
  ThrID := GetWindowThreadProcessId(GRIDWindow, @ProcID);
  ProcHandle := OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcID);

  ReadProcessMemory(ProcHandle, Pointer($00697CA3), @Check, $01, myRead);
  if Check[01] = $2B then
  begin
  mySize:= $0200;
  AllocatedMem:= VirtualAllocEx(ProcHandle, nil, mySize, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
  ChangeMem   := VirtualProtectEx(ProcHandle, AllocatedMem, mySize, PAGE_EXECUTE_READWRITE, nil);

  Flash01_02 := AllocatedMem-$00697CC0-$05;
  BackTo00697CC5:= Pointer($00697CC5);
  AllocBack01:= Pointer(BackTo00697CC5-AllocatedMem-$0D);

  WriteProcessMemory(ProcHandle, Pointer($00697CA3), @FlashbackOn, $03, myWrite);
  WriteProcessMemory(ProcHandle, Pointer($00697CC0), @Flash01, 01, myWrite);
  WriteProcessMemory(ProcHandle, Pointer($00697CC1), @Flash01_02, 04, myWrite);
  WriteProcessMemory(ProcHandle, Pointer(AllocatedMem), @AllocWrite01, 09, myWrite);
  WriteProcessMemory(ProcHandle, Pointer(AllocatedMem+$09), @AllocBack01, 04, myWrite);
  WriteProcessMemory(ProcHandle, Pointer(AllocatedMem+$09+$04), @FlashLastNop, 01, myWrite);

  PlaySound(PChar('Activate'),HInstance, snd_ASync or snd_Memory or snd_Resource);

  CloseHandle(ProcHandle);
  Sleep(100)

  end
  else
  begin

  ThrID := GetWindowThreadProcessId(GRIDWindow, @ProcID);
  ProcHandle := OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcID);

  WriteProcessMemory(ProcHandle, Pointer($00697CA3), @FlashbackOff, $03, myWrite);
  WriteProcessMemory(ProcHandle, Pointer($00697CC0), @DesFlash , $05, myWrite);

  PlaySound(PChar('Deactivate'),HInstance, snd_ASync or snd_Memory or snd_Resource);

  CloseHandle(ProcHandle);
  Sleep(100)

  end;
end;
end;

procedure EndRace1st;
var
   EndRace01_02				  : Pointer;
   AllocatedMem				  : Pointer;
   AllocBack01				   : Pointer;
   BackTo008F2E98				: Pointer;
   Check						 : Array[1..1] of byte;

   //Global
   mySize						: Word;
   GRIDWindow					: HWnd;
   ProcID, ThrID, myRead, myWrite: DWord;
   ProcHandle					: THandle;
   ChangeMem					 : WinBOOL;

  begin
  GRIDWindow := FindWindow('NeonClass_41', 'GRID');
  if GRIDWindow <> 0 then
  begin
  mySize:= $0200;
  ThrID := GetWindowThreadProcessId(GRIDWindow, @ProcID);
  ProcHandle := OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcID);

  ReadProcessMemory(ProcHandle, Pointer($008F2E91), @Check, 01, myRead);

  if Check[01] = $01 then
  begin
  AllocatedMem:= VirtualAllocEx(ProcHandle, nil, mySize, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
  ChangeMem   := VirtualProtectEx(ProcHandle, AllocatedMem, mySize, PAGE_EXECUTE_READWRITE, nil);

  EndRace01_02	:= AllocatedMem-$008F2E91-$05;
  BackTo008F2E98  := Pointer($008F2E98);
  AllocBack01	 := Pointer(BackTo008F2E98-$13-AllocatedMem);

  WriteProcessMemory(ProcHandle, Pointer($008F2E91), @EndRace01, 01, myWrite);
  WriteProcessMemory(ProcHandle, Pointer($008F2E92), @EndRace01_02, 04, myWrite);
  WriteProcessMemory(ProcHandle, Pointer($008F2E96), @EndRace01_03, 02, myWrite);
  WriteProcessMemory(ProcHandle, Pointer(AllocatedMem), @AllocWrite01ER, 15, myWrite);
  WriteProcessMemory(ProcHandle, Pointer(AllocatedMem+$0F), @AllocBack01, 04, myWrite);
  WriteProcessMemory(ProcHandle, Pointer(AllocatedMem+$0F+$04), @EndRace_LastNop, 01, myWrite);

  PlaySound(PChar('Activate'),HInstance, snd_ASync or snd_Memory or snd_Resource);

  CloseHandle(ProcHandle);
  Sleep(100)

  end
  else
  begin

  WriteProcessMemory(ProcHandle, Pointer($008F2E91), @DesEndRace03, 07, myWrite);

  PlaySound(PChar('Deactivate'),HInstance, snd_ASync or snd_Memory or snd_Resource);

  CloseHandle(ProcHandle);
  Sleep(100)

end;
end;
end;

procedure Add5;
var
   MoneyValueOld, MoneyValueNew  : DWord;
   MoneyAddress				  : ^DWord;
   //Global
   GRIDWindow					: HWnd;
   ProcID, ThrID, myRead, myWrite: DWord;
   ProcHandle					: THandle;
begin
  GRIDWindow := FindWindow('NeonClass_41', 'GRID');
  if GRIDWindow <> 0 then
  begin
  ThrID := GetWindowThreadProcessId(GRIDWindow, @ProcID);
  ProcHandle := OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcID);

  MoneyAddress:= Pointer($08DBF16C);
  ReadProcessMemory(ProcHandle, MoneyAddress, @MoneyValueOld, SizeOf(MoneyAddress), myRead);
  MoneyValueNew:= MoneyValueOld+$002625A0;
  WriteProcessMemory(ProcHandle, MoneyAddress, @MoneyValueNew, SizeOf(MoneyAddress), myWrite);

  PlaySound(PChar('Activate'),HInstance, snd_ASync or snd_Memory or snd_Resource);

  CloseHandle(ProcHandle);

  Sleep(100);

  end;
end;

procedure Get2;
var
   MoneyValueNew  : DWord;
   MoneyAddress   : ^DWord;
   //Global
   GRIDWindow					: HWnd;
   ProcID, ThrID, myRead, myWrite: DWord;
   ProcHandle					: THandle;
begin
  GRIDWindow := FindWindow('NeonClass_41', 'GRID');
  if GRIDWindow <> 0 then
  begin
  ThrID := GetWindowThreadProcessId(GRIDWindow, @ProcID);
  ProcHandle := OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcID);
  MoneyAddress := Pointer($08DBF16C);
  MoneyValueNew:= $3B9ACA00;
  WriteProcessMemory(ProcHandle, MoneyAddress, @MoneyValueNew, SizeOf(MoneyAddress), myWrite);

  PlaySound(PChar('Activate'),HInstance, snd_ASync or snd_Memory or snd_Resource);

  CloseHandle(ProcHandle);

  Sleep(100);

  end;
end;

procedure AddDriftPoints;
var
   DriftValueOld, DriftValueNew  : Single;
   //Global
   GRIDWindow					: HWnd;
   ProcID, ThrID, myRead, myWrite: DWord;
   ProcHandle					: THandle;
begin
  GRIDWindow := FindWindow('NeonClass_41', 'GRID');
  if GRIDWindow <> 0 then
  begin
  ThrID := GetWindowThreadProcessId(GRIDWindow, @ProcID);
  ProcHandle := OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcID);

  ReadProcessMemory(ProcHandle, Pointer($0767596C), @DriftValueOld, 04, myRead);

  DriftValueNew:= DriftValueOld+1000000;

  WriteProcessMemory(ProcHandle, Pointer($0767596C), @DriftValueNew, 04, myWrite);

  PlaySound(PChar('Activate'),HInstance, snd_ASync or snd_Memory or snd_Resource);

  CloseHandle(ProcHandle);

  Sleep(100);

  end;
  end;

procedure X99;
var
   X01_02						: Pointer;
   AllocBack01				   : Pointer;
   BackTo00634559				: Pointer;
   Check						 : Array[1..1] of byte;
   AllocatedMem				  : Pointer;
   X02_01						: Pointer;
   Allocjmp					  : Pointer;
   AllocBack02				   : Pointer;
   AllocatedMem2				 : Pointer;
   AllocjmpTo005CDBBF			: Pointer;
   BackTo005CDB43				: Pointer;

   //Global
   mySize						: Word;
   GRIDWindow					: HWnd;
   ProcID, ThrID, myRead, myWrite: DWord;
   ProcHandle					: THandle;
   ChangeMem					 : WinBOOL;

   begin
  GRIDWindow := FindWindow('NeonClass_41', 'GRID');
  if GRIDWindow <> 0 then
  begin
  mySize:= $0200;
  ThrID := GetWindowThreadProcessId(GRIDWindow, @ProcID);
  ProcHandle := OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcID);

  ReadProcessMemory(ProcHandle, Pointer($00634554), @Check, 01, myRead);

  if Check[01] = $F3 then
  begin
  AllocatedMem:= VirtualAllocEx(ProcHandle, nil, mySize, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
  AllocatedMem2:= AllocatedMem+$32;
  ChangeMem   := VirtualProtectEx(ProcHandle, AllocatedMem, mySize, PAGE_EXECUTE_READWRITE, nil);

  X01_02			:= AllocatedMem-$00634554-$05;
  BackTo00634559	:= Pointer($00634559);
  AllocBack01	   := Pointer(BackTo00634559-$11-AllocatedMem);

  X02_01			:= AllocatedMem2-$005CDB38-$05;
  AllocjmpTo005CDBBF := Pointer($005CDBBF);
  Allocjmp		 :=   Pointer(AllocjmpTo005CDBBF-AllocatedMem2-$13);
  BackTo005CDB43   := Pointer($005CDB43);
  AllocBack02	  := Pointer(BackTo005CDB43-AllocatedMem2-$18);

  WriteProcessMemory(ProcHandle, Pointer($00634554), @X01, 01, myWrite);
  WriteProcessMemory(ProcHandle, Pointer($00634555), @X01_02, 04, myWrite);
  WriteProcessMemory(ProcHandle, Pointer(AllocatedMem), @AllocWrite01X99, 13, myWrite);
  WriteProcessMemory(ProcHandle, Pointer(AllocatedMem+$0D), @AllocBack01, 04, myWrite);
  //WriteProcessMemory(ProcHandle, Pointer(), @, 00, myWrite);
  WriteProcessMemory(ProcHandle, Pointer($005CDB38), @X02, 01, myWrite);
  WriteProcessMemory(ProcHandle, Pointer($005CDB39), @X02_01, 04, myWrite);
  WriteProcessMemory(ProcHandle, Pointer($005CDB3D), @X02_02, 04, myWrite);
  WriteProcessMemory(ProcHandle, Pointer(AllocatedMem2), @AllocWrite02X99, 15, myWrite);
  WriteProcessMemory(ProcHandle, Pointer(AllocatedMem2+$0F), @Allocjmp, 04, myWrite);
  WriteProcessMemory(ProcHandle, Pointer(AllocatedMem2+$0F+$04), @AllocWrite03X99, 01, myWrite);
  WriteProcessMemory(ProcHandle, Pointer(AllocatedMem2+$0F+$04+$01), @AllocBack02, 04, myWrite);

  PlaySound(PChar('Activate'),HInstance, snd_ASync or snd_Memory or snd_Resource);

  CloseHandle(ProcHandle);

  Sleep(100)

  end
  else
  begin

  WriteProcessMemory(ProcHandle, Pointer($00634554), @XDes01, 05, myWrite);
  WriteProcessMemory(ProcHandle, Pointer($005CDB38), @XDes02, 09, myWrite);

  PlaySound(PChar('Deactivate'),HInstance, snd_ASync or snd_Memory or snd_Resource);

  CloseHandle(ProcHandle);
  Sleep(100)

  end;
  end;
  end;

procedure EndLeDrift;
var
//01
LeDrift01_02: Pointer;
BackTo008FC18D: Pointer;
AllocBack01: Pointer;
//02
LeDrift02_02: Pointer;
BackTo008F2E98: Pointer;
AllocBack02: Pointer;
//03
GoTo008FC187: Pointer;
//Global
ProcID, ThrID, myRead, myWrite: DWord;
GRIDWindow					  : HWnd;
ProcHandle					: THandle;
mySize						: Word;
AllocatedMem				  : Pointer;
AllocatedMem2				 : Pointer;
ChangeMem					 : WinBOOL;
ChangeMem2					: WinBOOL;
begin
GRIDWindow := FindWindow('NeonClass_41', 'GRID');
if GRIDWindow <> 0 then
begin
ThrID := GetWindowThreadProcessId(GRIDWindow, @ProcID);
ProcHandle := OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcID);
AllocatedMem:= VirtualAllocEx(ProcHandle, nil, mySize, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
AllocatedMem2:= VirtualAllocEx(ProcHandle, nil, mySize, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
ChangeMem   := VirtualProtectEx(ProcHandle, AllocatedMem, mySize, PAGE_EXECUTE_READWRITE, nil);
ChangeMem2   := VirtualProtectEx(ProcHandle, AllocatedMem, mySize, PAGE_EXECUTE_READWRITE, nil);

GoTo008FC187:= Pointer($008FC187);
LeDrift01_02 := Pointer(AllocatedMem-GoTo008FC187-$05);
BackTo008FC18D:= Pointer($008FC18D);
AllocBack01:= Pointer(BackTo008FC18D-AllocatedMem-$0F);
LeDrift02_02 := AllocatedMem2-$008F2E91-$05;
BackTo008F2E98:= Pointer($008F2E98);
AllocBack02:= Pointer(BackTo008F2E98-AllocatedMem2-$10);
//01
WriteProcessMemory(ProcHandle, Pointer($008FC187), @LeDrift01, 01, myWrite);
WriteProcessMemory(ProcHandle, Pointer($008FC188), @LeDrift01_02, 04, myWrite);
WriteProcessMemory(ProcHandle, Pointer($008FC18C), @LeDrift01_Nop, 01, myWrite);
WriteProcessMemory(ProcHandle, Pointer(AllocatedMem), @AllocWrite01EL, 11, myWrite);
WriteProcessMemory(ProcHandle, Pointer(AllocatedMem+$0B), @AllocBack01, 04, myWrite);
//02
WriteProcessMemory(ProcHandle, Pointer($008F2E91), @LeDrift02, 01, myWrite);
WriteProcessMemory(ProcHandle, Pointer($008F2E92), @LeDrift02_02, 04, myWrite);
WriteProcessMemory(ProcHandle, Pointer($008F2E96), @LeDrift02_Nop, 02, myWrite);
WriteProcessMemory(ProcHandle, Pointer(AllocatedMem2), @AllocWrite02EL, 12, myWrite);
WriteProcessMemory(ProcHandle, Pointer(AllocatedMem2+$0C), @AllocBack02, 04, myWrite);

PlaySound(PChar('Activate'),HInstance, snd_ASync or snd_Memory or snd_Resource);

Sleep(500);

WriteProcessMemory(ProcHandle, Pointer($008FC187), @DesLeDrift01, 06, myWrite);
WriteProcessMemory(ProcHandle, Pointer($008F2E91), @DesLeDrift02, 07, myWrite);

CloseHandle(ProcHandle);
Sleep(100);

end;
end;

procedure NoDamage;
var
Check: Array[1..1] of byte;
//Global
ProcID, ThrID, myRead, myWrite: DWord;
GRIDWindow					  : HWnd;
ProcHandle					: THandle;
begin
GRIDWindow := FindWindow('NeonClass_41', 'GRID');
if GRIDWindow <> 0 then
begin
ThrID := GetWindowThreadProcessId(GRIDWindow, @ProcID);
ProcHandle := OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcID);
ReadProcessMemory(ProcHandle, Pointer($00982F0F), @Check, 01, myRead);
if Check[01] = $F3 then begin
WriteProcessMemory(ProcHandle, Pointer($00982F0F), @Damage01, 06, myWrite);
WriteProcessMemory(ProcHandle, Pointer($009DADED), @Damage02, 06, myWrite);
WriteProcessMemory(ProcHandle, Pointer($009ADB37), @Damage03, 05, myWrite);
WriteProcessMemory(ProcHandle, Pointer($00982F4F), @Damage04, 06, myWrite);
WriteProcessMemory(ProcHandle, Pointer($0098295F), @Damage05, 04, myWrite);
WriteProcessMemory(ProcHandle, Pointer($009ADB3E), @Damage06, 05, myWrite);
PlaySound(PChar('Activate'),HInstance, snd_ASync or snd_Memory or snd_Resource);
CloseHandle(ProcHandle);
Sleep(100)
end
else begin
WriteProcessMemory(ProcHandle, Pointer($00982F0F), @DesDamage01, 06, myWrite);
WriteProcessMemory(ProcHandle, Pointer($009DADED), @DesDamage02, 06, myWrite);
WriteProcessMemory(ProcHandle, Pointer($009ADB37), @DesDamage03, 05, myWrite);
WriteProcessMemory(ProcHandle, Pointer($00982F4F), @DesDamage04, 06, myWrite);
WriteProcessMemory(ProcHandle, Pointer($0098295F), @DesDamage05, 04, myWrite);
WriteProcessMemory(ProcHandle, Pointer($009ADB3E), @DesDamage06, 05, myWrite);
PlaySound(PChar('Deactivate'),HInstance, snd_ASync or snd_Memory or snd_Resource);
CloseHandle(ProcHandle);
Sleep(100);
end;
end;
end;

begin
Start:
ClrScr;
SetConsoleTitle('Renan ^^');
TextColor(White);
TextBackground(Blue);
ClrScr;
Writeln('Race Driver GRID +8 Trainer');
Writeln('Made for the version 1.0.0.0 of the game');
Writeln('Created by Renan ([email protected])');
Writeln('');
Writeln('-------------------------------------------------');
Writeln('');
Writeln('Trainer Hotkeys:');
Writeln('');
Writeln('Press 1 - Unlimited Flashbacks (On/Off)');
Writeln('Press 2 - Always Finish in 1st Place (On/Off)');
Writeln('Press 3 - Add $5,000,000 To Your Bank');
Writeln('Press 4 - Get $2,000,000,000 in Your Bank');
Writeln('Press 5 - Add 1000000 Drift Points');
Writeln('Press 6 - X99 Combo Multiplier (On/Off)');
Writeln('Press 7 - End Le Mans/Freestyle Drift Race');
Writeln('Press 8 - No Damage (On/Off)');
Writeln('');
Writeln('-------------------------------------------------');
Writeln('');
Writeln('Press Scroll Lock - Enable/Disable cheat hotkeys');
Writeln('Press END - Quit');

repeat
HotkeyOn:
Sleep(100);
if (GetASyncKeyState (Key01) <> 0) then Flashback;
if (GetASyncKeyState (Key02) <> 0) then EndRace1st;
if (GetASyncKeyState (Key03) <> 0) then Add5;
if (GetASyncKeyState (Key04) <> 0) then Get2;
if (GetASyncKeyState (Key05) <> 0) then AddDriftPoints;
if (GetASyncKeyState (Key06) <> 0) then X99;
if (GetASyncKeyState (Key07) <> 0) then EndLeDrift;
if (GetASyncKeyState (Key08) <> 0) then NoDamage;
if (GetASyncKeyState (Key09) <> 0) then Exit;
if (GetASyncKeyState (Key10) <> 0) then goto HotkeyOff;
until Hi = 0;

repeat
HotkeyOff:
Sleep(100);
if (GetASyncKeyState (Key09) <> 0) then Exit;
if (GetASyncKeyState (Key10) <> 0) then goto HotkeyOn;
until Hi = 0;

end.




Affiliates: 
Follow us on:

Stay Safe: Read this info about dVT official outbound links!