<?xml version="1.0" encoding="utf-8"?>
<CheatTable CheatEngineTableVersion="45">
  <CheatEntries>
    <CheatEntry>
      <ID>2</ID>
      <Description>"Credits"</Description>
      <ShowAsSigned>0</ShowAsSigned>
      <VariableType>8 Bytes</VariableType>
      <Address>"gamemd.exe"+004B410C</Address>
      <Offsets>
        <Offset>30C</Offset>
        <Offset>14C</Offset>
        <Offset>10</Offset>
      </Offsets>
    </CheatEntry>
    <CheatEntry>
      <ID>6</ID>
      <Description>"No Credits Decrease"</Description>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{ Game   : Yuri's Revenge
  Version: 
  Date   : 2024-03-09
  Author : User

  This script does blah blah blah
}

[ENABLE]

aobscanmodule(credDecAOB,gamemd.exe,89 83 0C 03 00 00 EB 4C) // should be unique
alloc(newmem,$1000)

newmem:
  cmp byte ptr [ebx+30],0
  jne code
  jmp return
code:
  mov [ebx+0000030C],eax
  jmp return

credDecAOB:
  jmp newmem
  nop
return:
registersymbol(credDecAOB)

[DISABLE]

credDecAOB:
  db 89 83 0C 03 00 00

unregistersymbol(credDecAOB)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: gamemd.exe+F98BF

gamemd.exe+F98A5: 8B 4C 24 28        - mov ecx,[esp+28]
gamemd.exe+F98A9: 2B F8              - sub edi,eax
gamemd.exe+F98AB: 03 C8              - add ecx,eax
gamemd.exe+F98AD: 85 FF              - test edi,edi
gamemd.exe+F98AF: 89 4C 24 28        - mov [esp+28],ecx
gamemd.exe+F98B3: 7C 12              - jl gamemd.exe+F98C7
gamemd.exe+F98B5: 7E 2A              - jle gamemd.exe+F98E1
gamemd.exe+F98B7: EB 8F              - jmp gamemd.exe+F9848
gamemd.exe+F98B9: 2B C7              - sub eax,edi
gamemd.exe+F98BB: 89 7C 24 24        - mov [esp+24],edi
// ---------- INJECTING HERE ----------
gamemd.exe+F98BF: 89 83 0C 03 00 00  - mov [ebx+0000030C],eax
// ---------- DONE INJECTING  ----------
gamemd.exe+F98C5: EB 4C              - jmp gamemd.exe+F9913
gamemd.exe+F98C7: 8B 8B 0C 03 00 00  - mov ecx,[ebx+0000030C]
gamemd.exe+F98CD: 8B 44 24 28        - mov eax,[esp+28]
gamemd.exe+F98D1: 2B CF              - sub ecx,edi
gamemd.exe+F98D3: 03 C7              - add eax,edi
gamemd.exe+F98D5: 89 8B 0C 03 00 00  - mov [ebx+0000030C],ecx
gamemd.exe+F98DB: 89 44 24 28        - mov [esp+28],eax
gamemd.exe+F98DF: 33 FF              - xor edi,edi
gamemd.exe+F98E1: 8B CD              - mov ecx,ebp
gamemd.exe+F98E3: E8 68 FD 1C 00     - call gamemd.exe+2C9650
}
</AssemblerScript>
    </CheatEntry>
    <CheatEntry>
      <ID>5</ID>
      <Description>"No Power Drain"</Description>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{ Game   : Yuri's Revenge
  Version: 
  Date   : 2024-03-09
  Author : User

  This script does blah blah blah
}

[ENABLE]

aobscanmodule(powerDrainAOB,gamemd.exe,89 86 A8 53 00 00 A1) // should be unique
alloc(newmem,$1000)

newmem:
  cmp byte ptr [esi+158],0
  je code
  mov eax,0
code:
  mov [esi+000053A8],eax
  jmp return

powerDrainAOB:
  jmp newmem
  nop
return:
registersymbol(powerDrainAOB)

[DISABLE]

powerDrainAOB:
  db 89 86 A8 53 00 00

unregistersymbol(powerDrainAOB)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: gamemd.exe+F8825

gamemd.exe+F8809: 0F 9E C1           - setle cl
gamemd.exe+F880C: 49                 - dec ecx
gamemd.exe+F880D: 33 D2              - xor edx,edx
gamemd.exe+F880F: 23 C1              - and eax,ecx
gamemd.exe+F8811: 89 86 A4 53 00 00  - mov [esi+000053A4],eax
gamemd.exe+F8817: 8B 86 A8 53 00 00  - mov eax,[esi+000053A8]
gamemd.exe+F881D: 3B C5              - cmp eax,ebp
gamemd.exe+F881F: 0F 9E C2           - setle dl
gamemd.exe+F8822: 4A                 - dec edx
gamemd.exe+F8823: 23 C2              - and eax,edx
// ---------- INJECTING HERE ----------
gamemd.exe+F8825: 89 86 A8 53 00 00  - mov [esi+000053A8],eax
// ---------- DONE INJECTING  ----------
gamemd.exe+F882B: A1 4C 3D A8 00     - mov eax,[gamemd.exe+683D4C]
gamemd.exe+F8830: 8B 48 30           - mov ecx,[eax+30]
gamemd.exe+F8833: 8B 46 30           - mov eax,[esi+30]
gamemd.exe+F8836: 3B C8              - cmp ecx,eax
gamemd.exe+F8838: 0F 85 CF 00 00 00  - jne gamemd.exe+F890D
gamemd.exe+F883E: A1 38 B2 A8 00     - mov eax,[gamemd.exe+68B238]
gamemd.exe+F8843: 83 F8 03           - cmp eax,03
gamemd.exe+F8846: 74 09              - je gamemd.exe+F8851
gamemd.exe+F8848: 83 F8 04           - cmp eax,04
gamemd.exe+F884B: 0F 85 BC 00 00 00  - jne gamemd.exe+F890D
}
</AssemblerScript>
    </CheatEntry>
    <CheatEntry>
      <ID>10</ID>
      <Description>"Infinite Powers Use"</Description>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{ Game   : Yuri's Revenge
  Version: 
  Date   : 2024-03-09
  Author : User

  This script does blah blah blah
}

[ENABLE]


aobscanmodule(togglePowers,gamemd.exe,88 5E 6F 38 5E 6E) // should be unique
alloc(newmem,$1000)

label(code)
label(return)

newmem:
  mov bl,1
code:
  mov [esi+6F],bl
  cmp [esi+6E],bl
  jmp return

togglePowers:
  jmp newmem
  nop
return:
registersymbol(togglePowers)

[DISABLE]

togglePowers:
  db 88 5E 6F 38 5E 6E

unregistersymbol(togglePowers)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: gamemd.exe+2CBB15

gamemd.exe+2CBAF6: C2 08 00           - ret 0008
gamemd.exe+2CBAF9: 8B 54 24 20        - mov edx,[esp+20]
gamemd.exe+2CBAFD: 8B 44 24 24        - mov eax,[esp+24]
gamemd.exe+2CBB01: 52                 - push edx
gamemd.exe+2CBB02: 50                 - push eax
gamemd.exe+2CBB03: 8B CE              - mov ecx,esi
gamemd.exe+2CBB05: E8 86 08 00 00     - call gamemd.exe+2CC390
gamemd.exe+2CBB0A: 8B 46 28           - mov eax,[esi+28]
gamemd.exe+2CBB0D: 38 98 EE 00 00 00  - cmp [eax+000000EE],bl
gamemd.exe+2CBB13: 75 03              - jne gamemd.exe+2CBB18
// ---------- INJECTING HERE ----------
gamemd.exe+2CBB15: 88 5E 6F           - mov [esi+6F],bl
// ---------- DONE INJECTING  ----------
gamemd.exe+2CBB18: 38 5E 6E           - cmp [esi+6E],bl
gamemd.exe+2CBB1B: 74 46              - je gamemd.exe+2CBB63
gamemd.exe+2CBB1D: 8A 46 6D           - mov al,[esi+6D]
gamemd.exe+2CBB20: 88 5E 6E           - mov [esi+6E],bl
gamemd.exe+2CBB23: 3A C3              - cmp al,bl
gamemd.exe+2CBB25: 0F 84 69 01 00 00  - je gamemd.exe+2CBC94
gamemd.exe+2CBB2B: 8D 4C 24 20        - lea ecx,[esp+20]
gamemd.exe+2CBB2F: 88 5E 6F           - mov [esi+6F],bl
gamemd.exe+2CBB32: 88 5E 6D           - mov [esi+6D],bl
gamemd.exe+2CBB35: 8B 15 50 3D A8 00  - mov edx,[gamemd.exe+683D50]
}
</AssemblerScript>
    </CheatEntry>
  </CheatEntries>
  <CheatCodes>
    <CodeEntry>
      <Description>powersToggle :mov [esi+6F],bl</Description>
      <AddressString>gamemd.exe+2CBB15</AddressString>
      <Before>
        <Byte>00</Byte>
        <Byte>00</Byte>
        <Byte>00</Byte>
        <Byte>75</Byte>
        <Byte>03</Byte>
      </Before>
      <Actual>
        <Byte>88</Byte>
        <Byte>5E</Byte>
        <Byte>6F</Byte>
      </Actual>
      <After>
        <Byte>38</Byte>
        <Byte>5E</Byte>
        <Byte>6E</Byte>
        <Byte>74</Byte>
        <Byte>46</Byte>
      </After>
    </CodeEntry>
  </CheatCodes>
  <UserdefinedSymbols/>
</CheatTable>
