public SampleAppFix() { var taskId = 0; // Task A UnmodifiedInstructions.Add(new DataPatcherUnitTask() { TaskId = taskId, Description = typeof(SampleAppFix).Name, VirtualPosition = 0x0043A10C, Instructions = new byte[] { 0x0F, 0x8D, 0x66, 0x00, 0x00, 0x00 // jnz loc_43A178 } }); ModifiedInstructions.Add(new DataPatcherUnitTask() { TaskId = taskId, Description = typeof(SampleAppFix).Name, VirtualPosition = 0x0043A10C, Instructions = new byte[] { 0x90, // nop 0xE9, 0x66, 0x00, 0x00, 0x00 // jmp loc_43A178 } }); // End }
public YellowFlagFix(string executableFilePath) : base(executableFilePath) { var taskId = 0; // Task A UnmodifiedInstructions.Add(new DataPatcherUnitTask() { TaskId = taskId, Description = typeof(YellowFlagFix).Name, VirtualPosition = 0x00444E12, Instructions = new byte[] { 0x0F, 0x85, 0x3D, 0x00, 0x00, 0x00 // jnz loc_444E55 } }); ModifiedInstructions.Add(new DataPatcherUnitTask() { TaskId = taskId, Description = typeof(YellowFlagFix).Name, VirtualPosition = 0x00444E12, Instructions = new byte[] { 0x90, // nop 0xE9, 0x3D, 0x00, 0x00, 0x00 // jmp loc_444E55 } }); // End }
public DisplayModeFix() { var taskId = 0; // Task A UnmodifiedInstructions.Add(new DataPatcherUnitTask() { TaskId = taskId, Description = typeof(DisplayModeFix).Name, VirtualPosition = 0x00439E0A, Instructions = new byte[] { 0x0F, 0x84, 0x40, 0x00, 0x00, 0x00 // jz loc_439E50 } }); ModifiedInstructions.Add(new DataPatcherUnitTask() { TaskId = taskId, Description = typeof(DisplayModeFix).Name, VirtualPosition = 0x00439E0A, Instructions = new byte[] { 0x90, // nop 0xE9, 0x40, 0x00, 0x00, 0x00 // jmp loc_439E50 } }); // End }
public PointsSystemF120032009Update() { var taskId = 0; // Use unmodified instructions from default point scoring system as unmodified instructions var pointsSystemDefault = new PointsSystemF119912002Update(); foreach (var dataPatcherUnitTask in pointsSystemDefault.GetUnmodifiedInstructions()) { UnmodifiedInstructions.Add(new DataPatcherUnitTask { TaskId = dataPatcherUnitTask.TaskId, Description = typeof(PointsSystemF120032009Update).Name, VirtualPosition = dataPatcherUnitTask.VirtualPosition, Instructions = dataPatcherUnitTask.Instructions }); } ModifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(PointsSystemF120032009Update).Name, VirtualPosition = 0x005B8C5D, Instructions = new byte[] { // .text:005B8C5D var_68 = dword ptr -68h ; v1 (Points base offset) // .text:005B8C5D var_64 = dword ptr -64h ; Points for 1st position // .text:005B8C5D var_60 = dword ptr -60h ; Points for 2nd position // .text:005B8C5D var_5C = dword ptr -5Ch ; Points for 3rd position // .text:005B8C5D var_58 = dword ptr -58h ; Points for 4th position // .text:005B8C5D var_54 = dword ptr -54h ; Points for 5th position // .text:005B8C5D var_50 = dword ptr -50h ; Points for 6th position // .text:005B8C5D var_4C = dword ptr -4Ch ; Points for 7th position // .text:005B8C5D var_48 = dword ptr -48h ; Points for 8th position // .text:005B8C5D var_44 = dword ptr -44h ; Points for 9th position // .text:005B8C5D var_40 = dword ptr -40h ; Points for 10th position // .text:005B8C5D var_3C = dword ptr -3Ch ; Points for 11th position // .text:005B8C5D var_38 = dword ptr -38h ; Points for 12th position // .text:005B8C5D var_34 = dword ptr -34h ; Points for 13th position // .text:005B8C5D var_30 = dword ptr -30h ; Points for 14th position // .text:005B8C5D var_2C = dword ptr -2Ch ; Points for 15th position // .text:005B8C5D var_28 = dword ptr -28h ; Points for 16th position // .text:005B8C5D var_24 = dword ptr -24h ; Points for 17th position // .text:005B8C5D var_20 = dword ptr -20h ; Points for 18th position // .text:005B8C5D var_1C = dword ptr -1Ch ; Points for 19th position // .text:005B8C5D var_18 = dword ptr -18h ; Points for 20th position // .text:005B8C5D var_14 = dword ptr -14h ; Points for 21st position // .text:005B8C5D var_10 = dword ptr -10h ; Points for 22nd position // .text:005B8C5D var_C = dword ptr -0Ch ; v24 // .text:005B8C5D var_8 = dword ptr -8 ; v25 // .text:005B8C5D var_4 = dword ptr -4 ; i // .text:005B8C5D 0x55, // .text:005B8C5D push ebp 0x8B, 0xEC, // .text:005B8C5E mov ebp, esp 0x83, 0xEC, 0x68, // .text:005B8C60 sub esp, 68h 0x53, // .text:005B8C63 push ebx 0x56, // .text:005B8C64 push esi 0x57, // .text:005B8C65 push edi 0xC7, 0x45, 0x98, 0x00, 0x00, 0x00, 0x00, // .text:005B8C66 mov [ebp+var_68], 0 0xC7, 0x45, 0x9C, 0x0A, 0x00, 0x00, 0x00, // .text:005B8C6D mov [ebp+var_64], 0Ah 0xC7, 0x45, 0xA0, 0x08, 0x00, 0x00, 0x00, // .text:005B8C74 mov [ebp+var_60], 8 0xC7, 0x45, 0xA4, 0x06, 0x00, 0x00, 0x00, // .text:005B8C7B mov [ebp+var_5C], 6 0xC7, 0x45, 0xA8, 0x05, 0x00, 0x00, 0x00, // .text:005B8C82 mov [ebp+var_58], 5 0xC7, 0x45, 0xAC, 0x04, 0x00, 0x00, 0x00, // .text:005B8C89 mov [ebp+var_54], 4 0xC7, 0x45, 0xB0, 0x03, 0x00, 0x00, 0x00, // .text:005B8C90 mov [ebp+var_50], 3 0xC7, 0x45, 0xB4, 0x02, 0x00, 0x00, 0x00, // .text:005B8C97 mov [ebp+var_4C], 2 0xC7, 0x45, 0xB8, 0x01, 0x00, 0x00, 0x00, // .text:005B8C9E mov [ebp+var_48], 1 0xC7, 0x45, 0xBC, 0x00, 0x00, 0x00, 0x00, // .text:005B8CA5 mov [ebp+var_44], 0 0xC7, 0x45, 0xC0, 0x00, 0x00, 0x00, 0x00, // .text:005B8CAC mov [ebp+var_40], 0 0xC7, 0x45, 0xC4, 0x00, 0x00, 0x00, 0x00, // .text:005B8CB3 mov [ebp+var_3C], 0 0xC7, 0x45, 0xC8, 0x00, 0x00, 0x00, 0x00, // .text:005B8CBA mov [ebp+var_38], 0 0xC7, 0x45, 0xCC, 0x00, 0x00, 0x00, 0x00, // .text:005B8CC1 mov [ebp+var_34], 0 0xC7, 0x45, 0xD0, 0x00, 0x00, 0x00, 0x00, // .text:005B8CC8 mov [ebp+var_30], 0 0xC7, 0x45, 0xD4, 0x00, 0x00, 0x00, 0x00, // .text:005B8CCF mov [ebp+var_2C], 0 0xC7, 0x45, 0xD8, 0x00, 0x00, 0x00, 0x00, // .text:005B8CD6 mov [ebp+var_28], 0 0xC7, 0x45, 0xDC, 0x00, 0x00, 0x00, 0x00, // .text:005B8CDD mov [ebp+var_24], 0 0xC7, 0x45, 0xE0, 0x00, 0x00, 0x00, 0x00, // .text:005B8CE4 mov [ebp+var_20], 0 0xC7, 0x45, 0xE4, 0x00, 0x00, 0x00, 0x00, // .text:005B8CEB mov [ebp+var_1C], 0 0xC7, 0x45, 0xE8, 0x00, 0x00, 0x00, 0x00, // .text:005B8CF2 mov [ebp+var_18], 0 0xC7, 0x45, 0xEC, 0x00, 0x00, 0x00, 0x00, // .text:005B8CF9 mov [ebp+var_14], 0 0xC7, 0x45, 0xF0, 0x00, 0x00, 0x00, 0x00, // .text:005B8D00 mov [ebp+var_10], 0 // ; initialise loop 0xC7, 0x45, 0xFC, 0x01, 0x00, 0x00, 0x00, // .text:005B8D07 mov [ebp+var_4], 1 0xEB, 0x03, // .text:005B8D0E jmp short loc_5B8D13 // .text:005B8D10 ; --------------------------------------------------------------------------- // .text:005B8D10 // ; increment loop // .text:005B8D10 loc_5B8D10: ; CODE XREF: sub_5B8C5D+2B1j 0xFF, 0x45, 0xFC, // .text:005B8D10 inc [ebp+var_4] // .text:005B8D13 // ; for loop // .text:005B8D13 loc_5B8D13: ; CODE XREF: sub_5B8C5D+B1j 0x83, 0x7D, 0xFC, 0x08, // .text:005B8D13 cmp [ebp+var_4], 8 ; points positions 0x0F, 0x8F, 0xF6, 0x01, 0x00, 0x00, // .text:005B8D17 jg loc_5B8F13 ; loop termination 0x8B, 0x55, 0xFC, // .text:005B8D1D mov edx, [ebp+var_4] 0x69, 0xD2, 0xB0, 0x02, 0x00, 0x00, // .text:005B8D20 imul edx, 2B0h 0x8B, 0x82, 0x00, 0x75, 0x96, 0x00, // .text:005B8D26 mov eax, ds:dword_967500[edx] 0x89, 0x45, 0xF4, // .text:005B8D2C mov [ebp+var_C], eax 0x8B, 0x4D, 0xFC, // .text:005B8D2F mov ecx, [ebp+var_4] 0x69, 0xC9, 0xB0, 0x02, 0x00, 0x00, // .text:005B8D32 imul ecx, 2B0h 0x8B, 0x91, 0x04, 0x75, 0x96, 0x00, // .text:005B8D38 mov edx, ds:dword_967504[ecx] 0x89, 0x55, 0xF8, // .text:005B8D3E mov [ebp+var_8], edx 0x8B, 0x45, 0xF8, // .text:005B8D41 mov eax, [ebp+var_8] 0x69, 0xC0, 0x90, 0x1E, 0x00, 0x00, // .text:005B8D44 imul eax, 1E90h 0x8B, 0x88, 0x2C, 0x26, 0x20, 0x01, // .text:005B8D4A mov ecx, ds:dword_120262C[eax] 0x8B, 0x55, 0xFC, // .text:005B8D50 mov edx, [ebp+var_4] 0x03, 0x4C, 0x95, 0x98, // .text:005B8D53 add ecx, [ebp+edx*4+var_68] 0x8B, 0x45, 0xF8, // .text:005B8D57 mov eax, [ebp+var_8] 0x69, 0xC0, 0x90, 0x1E, 0x00, 0x00, // .text:005B8D5A imul eax, 1E90h 0x89, 0x88, 0x2C, 0x26, 0x20, 0x01, // .text:005B8D60 mov ds:dword_120262C[eax], ecx // ; outer if 0x83, 0x7D, 0xFC, 0x01, // .text:005B8D66 cmp [ebp+var_4], 1 0x0F, 0x85, 0x33, 0x01, 0x00, 0x00, // .text:005B8D6A jnz loc_5B8EA3 0x8B, 0x4D, 0xF8, // .text:005B8D70 mov ecx, [ebp+var_8] 0x69, 0xC9, 0x90, 0x1E, 0x00, 0x00, // .text:005B8D73 imul ecx, 1E90h 0x8B, 0x91, 0x30, 0x26, 0x20, 0x01, // .text:005B8D79 mov edx, ds:dword_1202630[ecx] 0x83, 0xC2, 0x01, // .text:005B8D7F add edx, 1 ; DATA XREF: sub_511BA4+66o // .text:005B8D7F ; sub_511D2A+10o 0x8B, 0x45, 0xF8, // .text:005B8D82 mov eax, [ebp+var_8] 0x69, 0xC0, 0x90, 0x1E, 0x00, 0x00, // .text:005B8D85 imul eax, 1E90h 0x89, 0x90, 0x30, 0x26, 0x20, 0x01, // .text:005B8D8B mov ds:dword_1202630[eax], edx 0x8B, 0x4D, 0xF8, // .text:005B8D91 mov ecx, [ebp+var_8] 0x69, 0xC9, 0x90, 0x1E, 0x00, 0x00, // .text:005B8D94 imul ecx, 1E90h 0x8B, 0x91, 0x3C, 0x26, 0x20, 0x01, // .text:005B8D9A mov edx, ds:dword_120263C[ecx] 0x83, 0xC2, 0x01, // .text:005B8DA0 add edx, 1 0x8B, 0x45, 0xF8, // .text:005B8DA3 mov eax, [ebp+var_8] 0x69, 0xC0, 0x90, 0x1E, 0x00, 0x00, // .text:005B8DA6 imul eax, 1E90h 0x89, 0x90, 0x3C, 0x26, 0x20, 0x01, // .text:005B8DAC mov ds:dword_120263C[eax], edx 0x8B, 0x45, 0xFC, // .text:005B8DB2 mov eax, [ebp+var_4] 0x69, 0xC0, 0xB0, 0x02, 0x00, 0x00, // .text:005B8DB5 imul eax, 2B0h 0x8B, 0x88, 0x30, 0x11, 0x9D, 0x00, // .text:005B8DBB mov ecx, ds:dword_9D1130[eax] 0x69, 0xC9, 0xF8, 0x0D, 0x00, 0x00, // .text:005B8DC1 imul ecx, 0DF8h 0x8B, 0x91, 0x40, 0xC4, 0x16, 0x01, // .text:005B8DC7 mov edx, ds:dword_116C440[ecx] 0x83, 0xC2, 0x01, // .text:005B8DCD add edx, 1 0x8B, 0x45, 0xFC, // .text:005B8DD0 mov eax, [ebp+var_4] 0x69, 0xC0, 0xB0, 0x02, 0x00, 0x00, // .text:005B8DD3 imul eax, 2B0h 0x8B, 0x88, 0x30, 0x11, 0x9D, 0x00, // .text:005B8DD9 mov ecx, ds:dword_9D1130[eax] 0x69, 0xC9, 0xF8, 0x0D, 0x00, 0x00, // .text:005B8DDF imul ecx, 0DF8h 0x89, 0x91, 0x40, 0xC4, 0x16, 0x01, // .text:005B8DE5 mov ds:dword_116C440[ecx], edx // ; inner if 0x8B, 0x55, 0xFC, // .text:005B8DEB mov edx, [ebp+var_4] 0x69, 0xD2, 0xB0, 0x02, 0x00, 0x00, // .text:005B8DEE imul edx, 2B0h 0x8B, 0x82, 0x30, 0x11, 0x9D, 0x00, // .text:005B8DF4 mov eax, ds:dword_9D1130[edx] 0x69, 0xC0, 0xF8, 0x0D, 0x00, 0x00, // .text:005B8DFA imul eax, 0DF8h 0x83, 0xB8, 0x40, 0xC4, 0x16, 0x01, 0x01, // .text:005B8E00 cmp ds:dword_116C440[eax], 1 0x75, 0x1F, // .text:005B8E07 jnz short loc_5B8E28 0x8B, 0x4D, 0xFC, // .text:005B8E09 mov ecx, [ebp+var_4] 0x69, 0xC9, 0xB0, 0x02, 0x00, 0x00, // .text:005B8E0C imul ecx, 2B0h 0x8B, 0x91, 0x30, 0x11, 0x9D, 0x00, // .text:005B8E12 mov edx, ds:dword_9D1130[ecx] 0x69, 0xD2, 0xF8, 0x0D, 0x00, 0x00, // .text:005B8E18 imul edx, 0DF8h 0xC7, 0x82, 0xE8, 0xD1, 0x16, 0x01, 0x01, 0x00, 0x00, 0x00, // .text:005B8E1E mov ds:dword_116D1E8[edx], 1 // ; end inner if // .text:005B8E28 // .text:005B8E28 loc_5B8E28: ; CODE XREF: sub_5B8C5D+1AAj 0x8B, 0x45, 0xFC, // .text:005B8E28 mov eax, [ebp+var_4] 0x69, 0xC0, 0xB0, 0x02, 0x00, 0x00, // .text:005B8E2B imul eax, 2B0h 0x8B, 0x88, 0x30, 0x11, 0x9D, 0x00, // .text:005B8E31 mov ecx, ds:dword_9D1130[eax] 0x69, 0xC9, 0xF8, 0x0D, 0x00, 0x00, // .text:005B8E37 imul ecx, 0DF8h 0x8B, 0x91, 0x44, 0xC4, 0x16, 0x01, // .text:005B8E3D mov edx, ds:dword_116C444[ecx] 0x83, 0xC2, 0x01, // .text:005B8E43 add edx, 1 0x8B, 0x45, 0xFC, // .text:005B8E46 mov eax, [ebp+var_4] 0x69, 0xC0, 0xB0, 0x02, 0x00, 0x00, // .text:005B8E49 imul eax, 2B0h 0x8B, 0x88, 0x30, 0x11, 0x9D, 0x00, // .text:005B8E4F mov ecx, ds:dword_9D1130[eax] 0x69, 0xC9, 0xF8, 0x0D, 0x00, 0x00, // .text:005B8E55 imul ecx, 0DF8h 0x89, 0x91, 0x44, 0xC4, 0x16, 0x01, // .text:005B8E5B mov ds:dword_116C444[ecx], edx 0x8B, 0x55, 0xF4, // .text:005B8E61 mov edx, [ebp+var_C] 0x69, 0xD2, 0xF8, 0x0D, 0x00, 0x00, // .text:005B8E64 imul edx, 0DF8h 0x8B, 0x82, 0x3C, 0xC4, 0x16, 0x01, // .text:005B8E6A mov eax, ds:dword_116C43C[edx] 0x83, 0xC0, 0x01, // .text:005B8E70 add eax, 1 0x8B, 0x4D, 0xF4, // .text:005B8E73 mov ecx, [ebp+var_C] 0x69, 0xC9, 0xF8, 0x0D, 0x00, 0x00, // .text:005B8E76 imul ecx, 0DF8h 0x89, 0x81, 0x3C, 0xC4, 0x16, 0x01, // .text:005B8E7C mov ds:dword_116C43C[ecx], eax 0x8B, 0x55, 0xF4, // .text:005B8E82 mov edx, [ebp-0Ch] 0x69, 0xD2, 0xF8, 0x0D, 0x00, 0x00, // .text:005B8E85 imul edx, 0DF8h 0x8B, 0x82, 0x48, 0xC4, 0x16, 0x01, // .text:005B8E8B mov eax, ds:dword_116C448[edx] 0x83, 0xC0, 0x01, // .text:005B8E91 add eax, 1 0x8B, 0x4D, 0xF4, // .text:005B8E94 mov ecx, [ebp+var_C] 0x69, 0xC9, 0xF8, 0x0D, 0x00, 0x00, // .text:005B8E97 imul ecx, 0DF8h 0x89, 0x81, 0x48, 0xC4, 0x16, 0x01, // .text:005B8E9D mov ds:dword_116C448[ecx], eax // ; end outer if // .text:005B8EA3 // .text:005B8EA3 loc_5B8EA3: ; CODE XREF: sub_5B8C5D+10Dj 0x8B, 0x55, 0xF4, // .text:005B8EA3 mov edx, [ebp-0Ch] 0x69, 0xD2, 0xF8, 0x0D, 0x00, 0x00, // .text:005B8EA6 imul edx, 0DF8h 0x8B, 0x82, 0x84, 0xD0, 0x16, 0x01, // .text:005B8EAC mov eax, ds:dword_116D084[edx] 0x83, 0xC0, 0x01, // .text:005B8EB2 add eax, 1 0x8B, 0x4D, 0xF4, // .text:005B8EB5 mov ecx, [ebp+var_C] 0x69, 0xC9, 0xF8, 0x0D, 0x00, 0x00, // .text:005B8EB8 imul ecx, 0DF8h 0x89, 0x81, 0x84, 0xD0, 0x16, 0x01, // .text:005B8EBE mov ds:dword_116D084[ecx], eax 0x8B, 0x55, 0xF4, // .text:005B8EC4 mov edx, [ebp+var_C] 0x69, 0xD2, 0xF8, 0x0D, 0x00, 0x00, // .text:005B8EC7 imul edx, 0DF8h 0x8B, 0x82, 0x2C, 0xC4, 0x16, 0x01, // .text:005B8ECD mov eax, ds:dword_116C42C[edx] 0x8B, 0x4D, 0xFC, // .text:005B8ED3 mov ecx, [ebp+var_4] 0x03, 0x44, 0x8D, 0x98, // .text:005B8ED6 add eax, [ebp+ecx*4+var_68] 0x8B, 0x55, 0xF4, // .text:005B8EDA mov edx, [ebp+var_C] 0x69, 0xD2, 0xF8, 0x0D, 0x00, 0x00, // .text:005B8EDD imul edx, 0DF8h 0x89, 0x82, 0x2C, 0xC4, 0x16, 0x01, // .text:005B8EE3 mov ds:dword_116C42C[edx], eax 0x8B, 0x45, 0xF4, // .text:005B8EE9 mov eax, [ebp+var_C] 0x69, 0xC0, 0xF8, 0x0D, 0x00, 0x00, // .text:005B8EEC imul eax, 0DF8h 0x8B, 0x88, 0x30, 0xC4, 0x16, 0x01, // .text:005B8EF2 mov ecx, ds:dword_116C430[eax] 0x8B, 0x55, 0xFC, // .text:005B8EF8 mov edx, [ebp+var_4] 0x03, 0x4C, 0x95, 0x98, // .text:005B8EFB add ecx, [ebp+edx*4+var_68] 0x8B, 0x45, 0xF4, // .text:005B8EFF mov eax, [ebp+var_C] 0x69, 0xC0, 0xF8, 0x0D, 0x00, 0x00, // .text:005B8F02 imul eax, 0DF8h 0x89, 0x88, 0x30, 0xC4, 0x16, 0x01, // .text:005B8F08 mov ds:dword_116C430[eax], ecx // ; top of loop 0xE9, 0xFD, 0xFD, 0xFF, 0xFF, // .text:005B8F0E jmp loc_5B8D10 // .text:005B8F13 ; --------------------------------------------------------------------------- // .text:005B8F13 // ; initialise loop // .text:005B8F13 loc_5B8F13: ; CODE XREF: sub_5B8C5D+BAj 0xC7, 0x45, 0xFC, 0x01, 0x00, 0x00, 0x00, // .text:005B8F13 mov [ebp+var_4], 1 0xEB, 0x03, // .text:005B8F1A jmp short loc_5B8F1F // .text:005B8F1C ; --------------------------------------------------------------------------- // .text:005B8F1C // ; increment loop // .text:005B8F1C loc_5B8F1C: ; CODE XREF: sub_5B8C5D+370j 0xFF, 0x45, 0xFC, // .text:005B8F1C inc [ebp+var_4] // ; for loop // .text:005B8F1F // .text:005B8F1F loc_5B8F1F: ; CODE XREF: sub_5B8C5D+2BDj 0x83, 0x7D, 0xFC, 0x16, // .text:005B8F1F cmp [ebp+var_4], 16h; number of drivers 0x0F, 0x8F, 0xA9, 0x00, 0x00, 0x00, // .text:005B8F23 jg loc_5B8FD2 ; loop termination 0x8B, 0x55, 0xFC, // .text:005B8F29 mov edx, [ebp+var_4] 0x69, 0xD2, 0xB0, 0x02, 0x00, 0x00, // .text:005B8F2C imul edx, 2B0h 0x8B, 0x82, 0x00, 0x75, 0x96, 0x00, // .text:005B8F32 mov eax, ds:dword_967500[edx] 0x89, 0x45, 0xF4, // .text:005B8F38 mov [ebp+var_C], eax 0x8B, 0x4D, 0xFC, // .text:005B8F3B mov ecx, [ebp+var_4] 0x69, 0xC9, 0xB0, 0x02, 0x00, 0x00, // .text:005B8F3E imul ecx, 2B0h 0x8B, 0x91, 0x04, 0x75, 0x96, 0x00, // .text:005B8F44 mov edx, ds:dword_967504[ecx] 0x89, 0x55, 0xF8, // .text:005B8F4A mov [ebp+var_8], edx 0x8B, 0x45, 0xF4, // .text:005B8F4D mov eax, [ebp+var_C] 0x69, 0xC0, 0xF8, 0x0D, 0x00, 0x00, // .text:005B8F50 imul eax, 0DF8h 0x8B, 0x4D, 0xFC, // .text:005B8F56 mov ecx, [ebp+var_4] 0xC7, 0x84, 0x88, 0x4C, 0xC4, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, // .text:005B8F59 mov ds:dword_116C44C[eax+ecx*4], 0 0x8B, 0x55, 0xF8, // .text:005B8F64 mov edx, [ebp+var_8] 0x69, 0xD2, 0x90, 0x1E, 0x00, 0x00, // .text:005B8F67 imul edx, 1E90h 0x8B, 0x45, 0xFC, // .text:005B8F6D mov eax, [ebp+var_4] 0xC7, 0x84, 0x82, 0x44, 0x26, 0x20, 0x01, 0x00, 0x00, 0x00, 0x00, // .text:005B8F70 mov ds:dword_1202644[edx+eax*4], 0 0x8B, 0x45, 0xF4, // .text:005B8F7B mov eax, [ebp+var_C] 0x69, 0xC0, 0xF8, 0x0D, 0x00, 0x00, // .text:005B8F7E imul eax, 0DF8h 0x8B, 0x4D, 0xFC, // .text:005B8F84 mov ecx, [ebp+var_4] 0x8B, 0x94, 0x88, 0x4C, 0xC4, 0x16, 0x01, // .text:005B8F87 mov edx, ds:dword_116C44C[eax+ecx*4] 0x83, 0xC2, 0x01, // .text:005B8F8E add edx, 1 0x8B, 0x45, 0xF4, // .text:005B8F91 mov eax, [ebp+var_C] 0x69, 0xC0, 0xF8, 0x0D, 0x00, 0x00, // .text:005B8F94 imul eax, 0DF8h 0x8B, 0x4D, 0xFC, // .text:005B8F9A mov ecx, [ebp+var_4] 0x89, 0x94, 0x88, 0x4C, 0xC4, 0x16, 0x01, // .text:005B8F9D mov ds:dword_116C44C[eax+ecx*4], edx 0x8B, 0x55, 0xF8, // .text:005B8FA4 mov edx, [ebp+var_8] 0x69, 0xD2, 0x90, 0x1E, 0x00, 0x00, // .text:005B8FA7 imul edx, 1E90h 0x8B, 0x45, 0xFC, // .text:005B8FAD mov eax, [ebp+var_4] 0x8B, 0x8C, 0x82, 0x44, 0x26, 0x20, 0x01, // .text:005B8FB0 mov ecx, ds:dword_1202644[edx+eax*4] 0x83, 0xC1, 0x01, // .text:005B8FB7 add ecx, 1 0x8B, 0x55, 0xF8, // .text:005B8FBA mov edx, [ebp+var_8] 0x69, 0xD2, 0x90, 0x1E, 0x00, 0x00, // .text:005B8FBD imul edx, 1E90h 0x8B, 0x45, 0xFC, // .text:005B8FC3 mov eax, [ebp+var_4] 0x89, 0x8C, 0x82, 0x44, 0x26, 0x20, 0x01, // .text:005B8FC6 mov ds:dword_1202644[edx+eax*4], ecx // ; top of loop 0xE9, 0x4A, 0xFF, 0xFF, 0xFF, // .text:005B8FCD jmp loc_5B8F1C // .text:005B8FD2 ; --------------------------------------------------------------------------- // .text:005B8FD2 // ; end sub // .text:005B8FD2 loc_5B8FD2: ; CODE XREF: sub_5B8C5D+2C6j 0x5F, // .text:005B8FD2 pop edi 0x5E, // .text:005B8FD3 pop esi 0x5B, // .text:005B8FD4 pop ebx 0xC9, // .text:005B8FD5 leave 0xC3, // .text:005B8FD6 retn // .text:005B8FD6 sub_5B8C5D endp // .text:005B8FD6 // .text:005B8FD6 ; --------------------------------------------------------------------------- 0xCC, // .text:005B8FD7 db CCh ; É 0xCC, // .text:005B8FD8 db CCh ; É 0xCC, // .text:005B8FD9 db CCh ; É 0xCC, // .text:005B8FDA db CCh ; É 0xCC, // .text:005B8FDB db CCh ; É 0xCC, // .text:005B8FDC db CCh ; É 0xCC, // .text:005B8FDD db CCh ; É 0xCC, // .text:005B8FDE db CCh ; É 0xCC, // .text:005B8FDF db CCh ; É 0xCC, // .text:005B8FE0 db CCh ; É 0xCC, // .text:005B8FE1 db CCh ; É 0xCC, // .text:005B8FE2 db CCh ; É 0xCC, // .text:005B8FE3 db CCh ; É 0xCC, // .text:005B8FE4 db CCh ; É 0xCC, // .text:005B8FE5 db CCh ; É 0xCC, // .text:005B8FE6 db CCh ; É OFF32 SEGDEF [0,90909090] 0xCC, // .text:005B8FE7 db CCh ; É 0xCC, // .text:005B8FE8 db CCh ; É 0xCC, // .text:005B8FE9 db CCh ; É 0xCC, // .text:005B8FEA db CCh ; É 0xCC, // .text:005B8FEB db CCh ; É 0xCC, // .text:005B8FEC db CCh ; É 0xCC, // .text:005B8FED db CCh ; É 0xCC, // .text:005B8FEE db CCh ; É 0xCC, // .text:005B8FEF db CCh ; É 0xCC, // .text:005B8FF0 db CCh ; É 0xCC, // .text:005B8FF1 db CCh ; É 0xCC, // .text:005B8FF2 db CCh ; É 0xCC // .text:005B8FF3 db CCh ; É } }); }
public TrackEditorFix() { var taskId = 0; // Task A // Enables track editor mode UnmodifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(TrackEditorFix).Name, VirtualPosition = 0x00450C4F, Instructions = new byte[] { 0x00, 0x00, 0x00, 0x00 // 0 } }); ModifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(TrackEditorFix).Name, VirtualPosition = 0x00450C4F, Instructions = new byte[] { 0x01, 0x00, 0x00, 0x00 // 1 } }); // End taskId++; // Task B // Force enable track editor key mappings by bypassing file check UnmodifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(TrackEditorFix).Name, VirtualPosition = 0x0044F4FF, Instructions = new byte[] { 0x68, 0xC0, 0x3A, 0x5F, 0x01, // push offset aDatYes3ded_dat 0xE8, 0xAF, 0x67, 0xFE, 0xFF, // call sub_435CB8 0x83, 0xC4, 0x04 // add esp, 4 } }); ModifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(TrackEditorFix).Name, VirtualPosition = 0x0044F4FF, Instructions = new byte[] { 0xB8, 0x01, 0x00, 0x00, 0x00, // mov eax, 1 0x90, 0x90, 0x90, 0x90, 0x90, // nop 0x90, 0x90, 0x90 // nop } }); // End taskId++; // Task C // Force enable track editor key mappings by bypassing file check UnmodifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(TrackEditorFix).Name, VirtualPosition = 0x0044F536, Instructions = new byte[] { 0x68, 0xD0, 0x3A, 0x5F, 0x01, // push offset aDatYes3ded_d_0 0xE8, 0x78, 0x67, 0xFE, 0xFF, // call sub_435CB8 0x83, 0xC4, 0x04 // add esp, 4 } }); ModifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(TrackEditorFix).Name, VirtualPosition = 0x0044F536, Instructions = new byte[] { 0xB8, 0x01, 0x00, 0x00, 0x00, // mov eax, 1 0x90, 0x90, 0x90, 0x90, 0x90, // nop 0x90, 0x90, 0x90 // nop } }); // End taskId++; // Task D // Force enable track editor key mappings by bypassing file check UnmodifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(TrackEditorFix).Name, VirtualPosition = 0x0044F55F, Instructions = new byte[] { 0x68, 0xE0, 0x3A, 0x5F, 0x01, // push offset aDatYes3ded_d_1 0xE8, 0x4F, 0x67, 0xFE, 0xFF, // call sub_435CB8 0x83, 0xC4, 0x04 // add esp, 4 } }); ModifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(TrackEditorFix).Name, VirtualPosition = 0x0044F55F, Instructions = new byte[] { 0xB8, 0x01, 0x00, 0x00, 0x00, // mov eax, 1 0x90, 0x90, 0x90, 0x90, 0x90, // nop 0x90, 0x90, 0x90 // nop } }); // End taskId++; // Task E // Force enable track editor key mappings by bypassing file check UnmodifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(TrackEditorFix).Name, VirtualPosition = 0x0044F5A8, Instructions = new byte[] { 0x68, 0xF0, 0x3A, 0x5F, 0x01, // push offset aDatYes3ded_d_2 0xE8, 0x06, 0x67, 0xFE, 0xFF, // call sub_435CB8 0x83, 0xC4, 0x04 // add esp, 4 } }); ModifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(TrackEditorFix).Name, VirtualPosition = 0x0044F5A8, Instructions = new byte[] { 0xB8, 0x01, 0x00, 0x00, 0x00, // mov eax, 1 0x90, 0x90, 0x90, 0x90, 0x90, // nop 0x90, 0x90, 0x90 // nop } }); // End taskId++; // Task F // Force enable track editor key mappings by bypassing file check UnmodifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(TrackEditorFix).Name, VirtualPosition = 0x0044F5F1, Instructions = new byte[] { 0x68, 0x00, 0x3B, 0x5F, 0x01, // push offset aDatYes3ded_d_3 0xE8, 0xBD, 0x66, 0xFE, 0xFF, // call sub_435CB8 0x83, 0xC4, 0x04 // add esp, 4 } }); ModifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(TrackEditorFix).Name, VirtualPosition = 0x0044F5F1, Instructions = new byte[] { 0xB8, 0x01, 0x00, 0x00, 0x00, // mov eax, 1 0x90, 0x90, 0x90, 0x90, 0x90, // nop 0x90, 0x90, 0x90 // nop } }); taskId++; // Task G // Force enable track editor key mappings by bypassing file check UnmodifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(TrackEditorFix).Name, VirtualPosition = 0x0044F655, Instructions = new byte[] { 0x68, 0x10, 0x3B, 0x5F, 0x01, // push offset aDatYes3ded_d_4 0xE8, 0x59, 0x66, 0xFE, 0xFF, // call sub_435CB8 0x83, 0xC4, 0x04 // add esp, 4 } }); ModifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(TrackEditorFix).Name, VirtualPosition = 0x0044F655, Instructions = new byte[] { 0xB8, 0x01, 0x00, 0x00, 0x00, // mov eax, 1 0x90, 0x90, 0x90, 0x90, 0x90, // nop 0x90, 0x90, 0x90 // nop } }); // End taskId++; // Task H // Force enable track editor key mappings by bypassing file check UnmodifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(TrackEditorFix).Name, VirtualPosition = 0x0044F69E, Instructions = new byte[] { 0x68, 0x20, 0x3B, 0x5F, 0x01, // offset aDatYes3ded_d_5 0xE8, 0x10, 0x66, 0xFE, 0xFF, // sub_435CB8 0x83, 0xC4, 0x04 // esp, 4 } }); ModifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(TrackEditorFix).Name, VirtualPosition = 0x0044F69E, Instructions = new byte[] { 0xB8, 0x01, 0x00, 0x00, 0x00, // mov eax, 1 0x90, 0x90, 0x90, 0x90, 0x90, // nop 0x90, 0x90, 0x90 // nop } }); // End taskId++; // Task I // Force enable track editor key mappings by bypassing file check UnmodifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(TrackEditorFix).Name, VirtualPosition = 0x0044F702, Instructions = new byte[] { 0x68, 0x30, 0x3B, 0x5F, 0x01, // push offset aDatYes3ded_d_6 0xE8, 0xAC, 0x65, 0xFE, 0xFF, // call sub_435CB8 0x83, 0xC4, 0x04 // add esp, 4 } }); ModifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(TrackEditorFix).Name, VirtualPosition = 0x0044F702, Instructions = new byte[] { 0xB8, 0x01, 0x00, 0x00, 0x00, // mov eax, 1 0x90, 0x90, 0x90, 0x90, 0x90, // nop 0x90, 0x90, 0x90 // nop } }); // End taskId++; // Task J // Force enable track editor key mappings by bypassing file check UnmodifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(TrackEditorFix).Name, VirtualPosition = 0x0044F74B, Instructions = new byte[] { 0x68, 0x40, 0x3B, 0x5F, 0x01, // push offset aDatYes3ded_d_7 0xE8, 0x63, 0x65, 0xFE, 0xFF, // call sub_435CB8 0x83, 0xC4, 0x04 // add esp, 4 } }); ModifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(TrackEditorFix).Name, VirtualPosition = 0x0044F74B, Instructions = new byte[] { 0xB8, 0x01, 0x00, 0x00, 0x00, // mov eax, 1 0x90, 0x90, 0x90, 0x90, 0x90, // nop 0x90, 0x90, 0x90 // nop } }); // End taskId++; // Task K // Force enable track editor key mappings by bypassing file check UnmodifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(TrackEditorFix).Name, VirtualPosition = 0x0044F7AF, Instructions = new byte[] { 0x68, 0x50, 0x3B, 0x5F, 0x01, // push offset aDatYes3ded_d_8 0xE8, 0xFF, 0x64, 0xFE, 0xFF, // call sub_435CB8 0x83, 0xC4, 0x04 // add esp, 4 } }); ModifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(TrackEditorFix).Name, VirtualPosition = 0x0044F7AF, Instructions = new byte[] { 0xB8, 0x01, 0x00, 0x00, 0x00, // mov eax, 1 0x90, 0x90, 0x90, 0x90, 0x90, // nop 0x90, 0x90, 0x90 // nop } }); // End taskId++; // Task L // Force enable track editor key mappings by bypassing file check UnmodifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(TrackEditorFix).Name, VirtualPosition = 0x0044F7E4, Instructions = new byte[] { 0x68, 0x60, 0x3B, 0x5F, 0x01, // push offset aDatYes3ded_d_9 0xE8, 0xCA, 0x64, 0xFE, 0xFF, // call sub_435CB8 0x83, 0xC4, 0x04 // add esp, 4 } }); ModifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(TrackEditorFix).Name, VirtualPosition = 0x0044F7E4, Instructions = new byte[] { 0xB8, 0x01, 0x00, 0x00, 0x00, // mov eax, 1 0x90, 0x90, 0x90, 0x90, 0x90, // nop 0x90, 0x90, 0x90 // nop } }); // End taskId++; // Task M // Force enable track editor key mappings by bypassing file check UnmodifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(TrackEditorFix).Name, VirtualPosition = 0x0044F859, Instructions = new byte[] { 0x68, 0x70, 0x3B, 0x5F, 0x01, // push offset aDatYes3ded__10 0xE8, 0x55, 0x64, 0xFE, 0xFF, // call sub_435CB8 0x83, 0xC4, 0x04 // add esp, 4 } }); ModifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(TrackEditorFix).Name, VirtualPosition = 0x0044F859, Instructions = new byte[] { 0xB8, 0x01, 0x00, 0x00, 0x00, // mov eax, 1 0x90, 0x90, 0x90, 0x90, 0x90, // nop 0x90, 0x90, 0x90 // nop } }); // End taskId++; // Task N // Force enable track editor key mappings by bypassing file check UnmodifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(TrackEditorFix).Name, VirtualPosition = 0x0044F882, Instructions = new byte[] { 0x68, 0x80, 0x3B, 0x5F, 0x01, // push offset aDatYes3ded__11 0xE8, 0x2C, 0x64, 0xFE, 0xFF, // call sub_435CB8 0x83, 0xC4, 0x04 // add esp, 4 } }); ModifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(TrackEditorFix).Name, VirtualPosition = 0x0044F882, Instructions = new byte[] { 0xB8, 0x01, 0x00, 0x00, 0x00, // mov eax, 1 0x90, 0x90, 0x90, 0x90, 0x90, // nop 0x90, 0x90, 0x90 // nop } }); // End taskId++; // Task O // Force enable track editor key mappings by bypassing file check UnmodifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(TrackEditorFix).Name, VirtualPosition = 0x0044F91D, Instructions = new byte[] { 0x68, 0x90, 0x3B, 0x5F, 0x01, // push offset aDatYes3ded__12 0xE8, 0x91, 0x63, 0xFE, 0xFF, // call sub_435CB8 0x83, 0xC4, 0x04 // add esp, 4 } }); ModifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(TrackEditorFix).Name, VirtualPosition = 0x0044F91D, Instructions = new byte[] { 0xB8, 0x01, 0x00, 0x00, 0x00, // mov eax, 1 0x90, 0x90, 0x90, 0x90, 0x90, // nop 0x90, 0x90, 0x90 // nop } }); // End taskId++; // Task P // Force enable track editor key mappings by bypassing file check UnmodifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(TrackEditorFix).Name, VirtualPosition = 0x0044F966, Instructions = new byte[] { 0x68, 0xA0, 0x3B, 0x5F, 0x01, // push offset aDatYes3ded__13 0xE8, 0x48, 0x63, 0xFE, 0xFF, // call sub_435CB8 0x83, 0xC4, 0x04 // add esp, 4 } }); ModifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(TrackEditorFix).Name, VirtualPosition = 0x0044F966, Instructions = new byte[] { 0xB8, 0x01, 0x00, 0x00, 0x00, // mov eax, 1 0x90, 0x90, 0x90, 0x90, 0x90, // nop 0x90, 0x90, 0x90 // nop } }); // End taskId++; // Task Q // Force enable track editor key mappings by bypassing file check UnmodifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(TrackEditorFix).Name, VirtualPosition = 0x0044F991, Instructions = new byte[] { 0x68, 0xB0, 0x3B, 0x5F, 0x01, // push offset aDatYes3ded__14 0xE8, 0x1D, 0x63, 0xFE, 0xFF, // call sub_435CB8 0x83, 0xC4, 0x04 // add esp, 4 } }); ModifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(TrackEditorFix).Name, VirtualPosition = 0x0044F991, Instructions = new byte[] { 0xB8, 0x01, 0x00, 0x00, 0x00, // mov eax, 1 0x90, 0x90, 0x90, 0x90, 0x90, // nop 0x90, 0x90, 0x90 // nop } }); // End taskId++; // Task R // Force enable track editor key mappings by bypassing file check UnmodifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(TrackEditorFix).Name, VirtualPosition = 0x0044F9CA, Instructions = new byte[] { 0x68, 0xC0, 0x3B, 0x5F, 0x01, // push offset aDatYes3ded__15 0xE8, 0xE4, 0x62, 0xFE, 0xFF, // call sub_435CB8 0x83, 0xC4, 0x04 // add esp, 4 } }); ModifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(TrackEditorFix).Name, VirtualPosition = 0x0044F9CA, Instructions = new byte[] { 0xB8, 0x01, 0x00, 0x00, 0x00, // mov eax, 1 0x90, 0x90, 0x90, 0x90, 0x90, // nop 0x90, 0x90, 0x90 // nop } }); // End taskId++; // Task S // Force enable track editor key mappings by bypassing file check UnmodifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(TrackEditorFix).Name, VirtualPosition = 0x0044FA2D, Instructions = new byte[] { 0x68, 0xD0, 0x3B, 0x5F, 0x01, // push offset aDatYes3ded__16 0xE8, 0x81, 0x62, 0xFE, 0xFF, // call sub_435CB8 0x83, 0xC4, 0x04 // add esp, 4 } }); ModifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(TrackEditorFix).Name, VirtualPosition = 0x0044FA2D, Instructions = new byte[] { 0xB8, 0x01, 0x00, 0x00, 0x00, // mov eax, 1 0x90, 0x90, 0x90, 0x90, 0x90, // nop 0x90, 0x90, 0x90 // nop } }); // End taskId++; // Task T // Force enable track editor key mappings by bypassing file check UnmodifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(TrackEditorFix).Name, VirtualPosition = 0x0044FA76, Instructions = new byte[] { 0x68, 0xE0, 0x3B, 0x5F, 0x01, // push offset aDatYes3ded__17 0xE8, 0x38, 0x62, 0xFE, 0xFF, // call sub_435CB8 0x83, 0xC4, 0x04 // add esp, 4 } }); ModifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(TrackEditorFix).Name, VirtualPosition = 0x0044FA76, Instructions = new byte[] { 0xB8, 0x01, 0x00, 0x00, 0x00, // mov eax, 1 0x90, 0x90, 0x90, 0x90, 0x90, // nop 0x90, 0x90, 0x90 // nop } }); // End taskId++; // Task U // Force enable track editor key mappings by bypassing file check UnmodifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(TrackEditorFix).Name, VirtualPosition = 0x0044FAC6, Instructions = new byte[] { 0x68, 0xF0, 0x3B, 0x5F, 0x01, // push offset aDatYes3ded__18 0xE8, 0xE8, 0x61, 0xFE, 0xFF, // call sub_435CB8 0x83, 0xC4, 0x04 // add esp, 4 } }); ModifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(TrackEditorFix).Name, VirtualPosition = 0x0044FAC6, Instructions = new byte[] { 0xB8, 0x01, 0x00, 0x00, 0x00, // mov eax, 1 0x90, 0x90, 0x90, 0x90, 0x90, // nop 0x90, 0x90, 0x90 // nop } }); // End taskId++; // Task V // Force enable track editor key mappings by bypassing file check UnmodifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(TrackEditorFix).Name, VirtualPosition = 0x0044FAF1, Instructions = new byte[] { 0x68, 0x00, 0x3C, 0x5F, 0x01, // push offset aDatYes3ded__19 0xE8, 0xBD, 0x61, 0xFE, 0xFF, // call sub_435CB8 0x83, 0xC4, 0x04 // add esp, 4 } }); ModifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(TrackEditorFix).Name, VirtualPosition = 0x0044FAF1, Instructions = new byte[] { 0xB8, 0x01, 0x00, 0x00, 0x00, // mov eax, 1 0x90, 0x90, 0x90, 0x90, 0x90, // nop 0x90, 0x90, 0x90 // nop } }); // End taskId++; // Task W // Force enable track editor key mappings by bypassing file check UnmodifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(TrackEditorFix).Name, VirtualPosition = 0x0044FB22, Instructions = new byte[] { 0x68, 0x10, 0x3C, 0x5F, 0x01, // push offset aDatYes3ded__20 0xE8, 0x8C, 0x61, 0xFE, 0xFF, // call sub_435CB8 0x83, 0xC4, 0x04 // add esp, 4 } }); ModifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(TrackEditorFix).Name, VirtualPosition = 0x0044FB22, Instructions = new byte[] { 0xB8, 0x01, 0x00, 0x00, 0x00, // mov eax, 1 0x90, 0x90, 0x90, 0x90, 0x90, // nop 0x90, 0x90, 0x90 // nop } }); // End taskId++; // Task X // Force enable track editor key mappings by bypassing file check UnmodifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(TrackEditorFix).Name, VirtualPosition = 0x0044FB53, Instructions = new byte[] { 0x68, 0x20, 0x3C, 0x5F, 0x01, // push offset aDatYes3ded__21 0xE8, 0x5B, 0x61, 0xFE, 0xFF, // call sub_435CB8 0x83, 0xC4, 0x04 // add esp, 4 } }); ModifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(TrackEditorFix).Name, VirtualPosition = 0x0044FB53, Instructions = new byte[] { 0xB8, 0x01, 0x00, 0x00, 0x00, // mov eax, 1 0x90, 0x90, 0x90, 0x90, 0x90, // nop 0x90, 0x90, 0x90 // nop } }); // End taskId++; // Task Y // Force enable track editor key mappings by bypassing file check UnmodifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(TrackEditorFix).Name, VirtualPosition = 0x0044FB84, Instructions = new byte[] { 0x68, 0x30, 0x3C, 0x5F, 0x01, // push offset aDatYes3ded__22 0xE8, 0x2A, 0x61, 0xFE, 0xFF, // call sub_435CB8 0x83, 0xC4, 0x04 // add esp, 4 } }); ModifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(TrackEditorFix).Name, VirtualPosition = 0x0044FB84, Instructions = new byte[] { 0xB8, 0x01, 0x00, 0x00, 0x00, // mov eax, 1 0x90, 0x90, 0x90, 0x90, 0x90, // nop 0x90, 0x90, 0x90 // nop } }); // End taskId++; // Task Z // Change tga filepath to load track editor enabled reminder image UnmodifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(TrackEditorFix).Name, VirtualPosition = 0x01602A54, Instructions = new byte[] { // 'tga\backdrop\raceann.tga' 0x74, 0x67, 0x61, 0x5C, 0x62, 0x61, 0x63, 0x6B, 0x64, 0x72, 0x6F, 0x70, 0x5C, 0x72, 0x61, 0x63, 0x65, 0x61, 0x6E, 0x6E, 0x2E, 0x74, 0x67, 0x61 // r a c e a n n . t g a } }); ModifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(TrackEditorFix).Name, VirtualPosition = 0x01602A54, Instructions = new byte[] { // 'tga\backdrop\racetee.tga' 0x74, 0x67, 0x61, 0x5C, 0x62, 0x61, 0x63, 0x6B, 0x64, 0x72, 0x6F, 0x70, 0x5C, 0x72, 0x61, 0x63, 0x65, 0x74, 0x65, 0x65, 0x2E, 0x74, 0x67, 0x61 // r a c e t e e . t g a } }); // End }
public CarHandlingPerformanceFix(string executableFilePath) : base(executableFilePath) { var taskId = 0; // Task A UnmodifiedInstructions.Add(new DataPatcherUnitTask() { TaskId = taskId, Description = typeof(CarHandlingPerformanceFix).Name, VirtualPosition = 0x0053656B, Instructions = new byte[] { // ; divide value by 10 0xB9, 0x0A, 0x00, 0x00, 0x00, // .text:0053656B mov ecx, 0Ah 0x8B, 0x45, 0xC0, // .text:00536570 mov eax, [ebp+var_40] 0x99, // .text:00536573 cdq 0xF7, 0xF9, // .text:00536574 idiv ecx 0x89, 0x45, 0xA8, // .text:00536576 mov [ebp+var_58], eax // // ; make sure value is 0 or greater 0x83, 0x7D, 0xA8, 0x01, // .text:00536579 cmp [ebp+var_58], 1 0x0F, 0x8D, 0x0C, 0x00, 0x00, 0x00, // .text:0053657D jge loc_53658F 0xC7, 0x45, 0xA8, 0x00, 0x00, 0x00, 0x00, // .text:00536583 mov [ebp+var_58], 0 0xE9, 0x11, 0x00, 0x00, 0x00, // .text:0053658A jmp loc_5365A0 // // .text:0053658F ; --------------------------------------------------------------------------- // .text:0053658F ; make sure value is 11 or less // .text:0053658F loc_53658F: ; CODE XREF: sub_535B90+9EDj 0x83, 0x7D, 0xA8, 0x0B, // .text:0053658F cmp [ebp+var_58], 0Bh 0x0F, 0x8E, 0x07, 0x00, 0x00, 0x00, // .text:00536593 jle loc_5365A0 0xC7, 0x45, 0xA8, 0x0B, 0x00, 0x00, 0x00, // .text:00536599 mov [ebp+var_58], 0Bh // // .text:005365A0 ; multiply value by 10 // .text:005365A0 loc_5365A0: ; CODE XREF: sub_535B90+9FAj // .text:005365A0 ; sub_535B90+A03j 0x8B, 0x45, 0xA8, // .text:005365A0 mov eax, [ebp+var_58] 0x8D, 0x04, 0x80, // .text:005365A3 lea eax, [eax+eax*4] 0x03, 0xC0, // .text:005365A6 add eax, eax 0x89, 0x45, 0xA8 // .text:005365A8 mov [ebp+var_58], eax } }); ModifiedInstructions.Add(new DataPatcherUnitTask() { TaskId = taskId, Description = typeof(CarHandlingPerformanceFix).Name, VirtualPosition = 0x0053656B, Instructions = new byte[] { // ; move car handling value 0x90, 0x90, 0x90, 0x90, 0x90, // .text:0053656B {nop} 0x8B, 0x45, 0xC0, // .text:00536570 mov eax, [ebp+var_40] 0x90, // .text:00536573 {nop} 0x90, 0x90, // .text:00536574 {nop} 0x89, 0x45, 0xA8, // .text:00536576 mov [ebp+var_58], eax // 0x90, 0x90, 0x90, 0x90, // .text:00536579 {nop} 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, // .text:0053657D {nop} 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, // .text:00536583 {nop} 0x90, 0x90, 0x90, 0x90, 0x90, // .text:0053658A {nop} // 0x90, 0x90, 0x90, 0x90, // .text:0053658F {nop} 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, // .text:00536593 {nop} 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, // .text:00536599 {nop} // 0x90, 0x90, 0x90, // .text:005365A0 {nop} 0x90, 0x90, 0x90, // .text:005365A3 {nop} 0x90, 0x90, // .text:005365A6 {nop} 0x90, 0x90, 0x90 // .text:005365A8 {nop} } }); // End }
public RaceSoundsFix() { var taskId = 0; // Task A // Resolve unhandled exception at 0x0049aa6b in gpw.exe: 0xC0000005: Access violation reading location 0x0771e202. UnmodifiedInstructions.Add(new DataPatcherUnitTask() { TaskId = taskId, Description = typeof(RaceSoundsFix).Name, VirtualPosition = 0x0049AA5F, Instructions = new byte[] { 0x8B, 0x45, 0xE8, // .text:0049AA5F mov eax, [ebp+var_18] 0x2B, 0x45, 0xEC, // .text:0049AA62 sub eax, [ebp+var_14] 0x50, // .text:0049AA65 push eax ; Size 0xA1, 0x18, 0xF2, 0x72, 0x00, // .text:0049AA66 mov eax, ds:dword_72F218 0x66, 0x8B, 0x40, 0x0E, // .text:0049AA6B mov ax, [eax+0Eh] 0x25, 0xFF, 0xFF, 0x00, 0x00, // .text:0049AA6F and eax, 0FFFFh 0x83, 0xE8, 0x08, // .text:0049AA74 sub eax, 8 0x83, 0xF8, 0x01, // .text:0049AA77 cmp eax, 1 0x1B, 0xC0, // .text:0049AA7A sbb eax, eax 0x25, 0x80, 0x00, 0x00, 0x00, // .text:0049AA7C and eax, 80h 0x50, // .text:0049AA81 push eax ; Val 0x8B, 0x45, 0xEC, // .text:0049AA82 mov eax, [ebp+var_14] 0x03, 0x45, 0xF8, // .text:0049AA85 add eax, [ebp+var_8] 0x50, // .text:0049AA88 push eax ; Dst 0xE8, 0xBA, 0x20, 0x1E, 0x00, // .text:0049AA89 call _memset 0x83, 0xC4, 0x0C // .text:0049AA8E add esp, 0Ch } }); ModifiedInstructions.Add(new DataPatcherUnitTask() { TaskId = taskId, Description = typeof(RaceSoundsFix).Name, VirtualPosition = 0x0049AA5F, Instructions = new byte[] { 0x90, 0x90, 0x90, // .text:0049AA5F {nop} 0x90, 0x90, 0x90, // .text:0049AA62 {nop} 0x90, // .text:0049AA65 {nop} 0x90, 0x90, 0x90, 0x90, 0x90, // .text:0049AA66 {nop} 0x90, 0x90, 0x90, 0x90, // .text:0049AA6B {nop} 0x90, 0x90, 0x90, 0x90, 0x90, // .text:0049AA6F {nop} 0x90, 0x90, 0x90, // .text:0049AA74 {nop} 0x90, 0x90, 0x90, // .text:0049AA77 {nop} 0x90, 0x90, // .text:0049AA7A {nop} 0x90, 0x90, 0x90, 0x90, 0x90, // .text:0049AA7C {nop} 0x90, // .text:0049AA81 {nop} 0x90, 0x90, 0x90, // .text:0049AA82 {nop} 0x90, 0x90, 0x90, // .text:0049AA85 {nop} 0x90, // .text:0049AA88 {nop} 0x90, 0x90, 0x90, 0x90, 0x90, // .text:0049AA89 {nop} 0x90, 0x90, 0x90 // .text:0049AA8E {nop} } }); // End taskId++; // Task B // Resolve unhandled exception at 0x0049b41e in gpw.exe: 0xC0000005: Access violation reading location 0x01c4b04e. UnmodifiedInstructions.Add(new DataPatcherUnitTask() { TaskId = taskId, Description = typeof(RaceSoundsFix).Name, VirtualPosition = 0x0049B40A, Instructions = new byte[] { 0x8B, 0x45, 0xE8, // .text:0049B40A mov eax, [ebp+var_18] 0x2B, 0x45, 0xEC, // .text:0049B40D sub eax, [ebp+var_14] 0x50, // .text:0049B410 push eax ; Size 0x8B, 0x45, 0x0C, // .text:0049B411 mov eax, [ebp+arg_4] 0xC1, 0xE0, 0x02, // .text:0049B414 shl eax, 2 0x8B, 0x84, 0x80, 0x68, 0xF4, 0x72, 0x00, // .text:0049B417 mov eax, ds:dword_72F468[eax+eax*4] 0x66, 0x8B, 0x40, 0x0E, // .text:0049B41E mov ax, [eax+0Eh] 0x25, 0xFF, 0xFF, 0x00, 0x00, // .text:0049B422 and eax, 0FFFFh 0x83, 0xE8, 0x08, // .text:0049B427 sub eax, 8 0x83, 0xF8, 0x01, // .text:0049B42A cmp eax, 1 0x1B, 0xC0, // .text:0049B42D sbb eax, eax 0x25, 0x80, 0x00, 0x00, 0x00, // .text:0049B42F and eax, 80h 0x50, // .text:0049B434 push eax ; Val 0x8B, 0x45, 0xEC, // .text:0049B435 mov eax, [ebp+var_14] 0x03, 0x45, 0xF8, // .text:0049B438 add eax, [ebp+Dst] 0x50, // .text:0049B43B push eax ; Dst 0xE8, 0x07, 0x17, 0x1E, 0x00, // .text:0049B43C call _memset 0x83, 0xC4, 0x0C // .text:0049B441 add esp, 0Ch } }); ModifiedInstructions.Add(new DataPatcherUnitTask() { TaskId = taskId, Description = typeof(RaceSoundsFix).Name, VirtualPosition = 0x0049B40A, Instructions = new byte[] { 0x90, 0x90, 0x90, // .text:0049B40A {nop} 0x90, 0x90, 0x90, // .text:0049B40D {nop} 0x90, // .text:0049B410 {nop} 0x90, 0x90, 0x90, // .text:0049B411 {nop} 0x90, 0x90, 0x90, // .text:0049B414 {nop} 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, // .text:0049B417 {nop} 0x90, 0x90, 0x90, 0x90, // .text:0049B41E {nop} 0x90, 0x90, 0x90, 0x90, 0x90, // .text:0049B422 {nop} 0x90, 0x90, 0x90, // .text:0049B427 {nop} 0x90, 0x90, 0x90, // .text:0049B42A {nop} 0x90, 0x90, // .text:0049B42D {nop} 0x90, 0x90, 0x90, 0x90, 0x90, // .text:0049B42F {nop} 0x90, // .text:0049B434 {nop} 0x90, 0x90, 0x90, // .text:0049B435 {nop} 0x90, 0x90, 0x90, // .text:0049B438 {nop} 0x90, // .text:0049B43B {nop} 0x90, 0x90, 0x90, 0x90, 0x90, // .text:0049B43C {nop} 0x90, 0x90, 0x90 // .text:0049B441 {nop} } }); // End }
public GameCdFix() { var taskId = 0; // Task A UnmodifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(GameCdFix).Name, VirtualPosition = 0x0043989D, Instructions = new byte[] { 0x0F, 0x85 // jnz } }); ModifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(GameCdFix).Name, VirtualPosition = 0x0043989D, Instructions = new byte[] { 0x90, // nop 0xE9 // jmp } }); // End taskId++; // Task B UnmodifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(GameCdFix).Name, VirtualPosition = 0x004398E3, Instructions = new byte[] { 0x0F, 0x85 // jnz } }); ModifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(GameCdFix).Name, VirtualPosition = 0x004398E3, Instructions = new byte[] { 0x90, // nop 0xE9 // jmp } }); // End taskId++; // Task C UnmodifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(GameCdFix).Name, VirtualPosition = 0x0043997A, Instructions = new byte[] { 0x0F, 0x84 // jz } }); ModifiedInstructions.Add(new DataPatcherUnitTask { TaskId = taskId, Description = typeof(GameCdFix).Name, VirtualPosition = 0x0043997A, Instructions = new byte[] { 0x90, // nop 0xE9 // jmp } }); // End }