<?xml version="1.0" encoding="utf-8"?>
<CheatTable CheatEngineTableVersion="45">
  <CheatEntries>
    <CheatEntry>
      <ID>2</ID>
      <Description>"Credits"</Description>
      <ShowAsSigned>0</ShowAsSigned>
      <VariableType>4 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: STEAM 1.0.1.1
  Date   : 2024-03-09
  Author : satandidnowrong

  There is no good, no evil, only ignorance
}

[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: STEAM 1.0.1.1
  Date   : 2024-03-09
  Author : satandidnowrong

  I am so excited for every thing to be dust
}

[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>16</ID>
      <Description>"Infinite Powers Use"</Description>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{ Game   : Yuri's Revenge
  Version: STEAM 1.0.1.1
  Date   : 2024-03-10
  Author : satandidnowrong

  I cannot wait until I am dead
}

[ENABLE]

aobscanmodule(togglePowersAOB,gamemd.exe,5E 32 C0 5B 83 C4 10 C2 08 00 90 83) // should be unique
alloc(newmem,$1000)

newmem:
  cmp [ecx+808],0
  jne code
  mov [esi+6F],1
code:
  pop esi
  xor al,al
  pop ebx
  add esp,10
  jmp return

togglePowersAOB:
  jmp newmem
  nop 2
return:
registersymbol(togglePowersAOB)

[DISABLE]

togglePowersAOB:
  db 5E 32 C0 5B 83 C4 10

unregistersymbol(togglePowersAOB)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: gamemd.exe+2CBC95

gamemd.exe+2CBC75: A1 84 ED A8 00     - mov eax,[gamemd.exe+68ED84]
gamemd.exe+2CBC7A: 89 07              - mov [edi],eax
gamemd.exe+2CBC7C: 8B 44 24 14        - mov eax,[esp+14]
gamemd.exe+2CBC80: 89 47 04           - mov [edi+04],eax
gamemd.exe+2CBC83: 89 4F 08           - mov [edi+08],ecx
gamemd.exe+2CBC86: 8B 4E 28           - mov ecx,[esi+28]
gamemd.exe+2CBC89: 38 99 E5 00 00 00  - cmp [ecx+000000E5],bl
gamemd.exe+2CBC8F: 74 03              - je gamemd.exe+2CBC94
gamemd.exe+2CBC91: 89 5E 7C           - mov [esi+7C],ebx
gamemd.exe+2CBC94: 5F                 - pop edi
// ---------- INJECTING HERE ----------
gamemd.exe+2CBC95: 5E                 - pop esi
// ---------- DONE INJECTING  ----------
gamemd.exe+2CBC96: 32 C0              - xor al,al
gamemd.exe+2CBC98: 5B                 - pop ebx
gamemd.exe+2CBC99: 83 C4 10           - add esp,10
gamemd.exe+2CBC9C: C2 08 00           - ret 0008
gamemd.exe+2CBC9F: 90                 - nop 
gamemd.exe+2CBCA0: 83 EC 0C           - sub esp,0C
gamemd.exe+2CBCA3: 53                 - push ebx
gamemd.exe+2CBCA4: 56                 - push esi
gamemd.exe+2CBCA5: 8B F1              - mov esi,ecx
gamemd.exe+2CBCA7: 57                 - push edi
}
</AssemblerScript>
    </CheatEntry>
    <CheatEntry>
      <ID>28</ID>
      <Description>"Damage Multiplier"</Description>
      <Options moHideChildren="1" moDeactivateChildrenAsWell="1" moAllowManualCollapseAndExpand="1"/>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{ Game   : Yuri's Revenge
  Version: 
  Date   : 2024-03-11
  Author : User

  This script does blah blah blah
}

[ENABLE]

aobscanmodule(dmgAOB,gamemd.exe,2B C2 85 C0 89 46 6C) // should be unique
alloc(newmem,$1000)
alloc(dmgToPlrMul,4)
alloc(dmgToNmeMul,4)
alloc(instKill,1)

label(code)
label(return)
label(cont)

dmgToPlrMul:
  dd (float)0.5
dmgToNmeMul:
  dd (float)0.5
instKill:
  db 0

newmem:
  cvtsi2ss xmm0,edx
  cmp [esi+41C],0
  jne @f
  movss xmm1,dword ptr [dmgToPlrMul]
  jmp cont
@@:
  movss xmm1,dword ptr [dmgToNmeMul]
cont:
  mulss xmm0,xmm1
  cvttss2si edx,xmm0

code:
  sub eax,edx
  test eax,eax
  cmp byte ptr [instKill],0
  je @f
  cmp [esi+41C],0
  je @f
  mov eax,0
@@:
  mov [esi+6C],eax
  jmp return

dmgAOB:
  jmp newmem
  nop 2
return:
registersymbol(dmgAOB)
registersymbol(dmgToPlrMul)
registersymbol(dmgToNmeMul)
registersymbol(instKill)

[DISABLE]

dmgAOB:
  db 2B C2 85 C0 89 46 6C

unregistersymbol(*)
dealloc(*)

{
// ORIGINAL CODE - INJECTION POINT: gamemd.exe+1F5509

gamemd.exe+1F54EE: D8 D9                    - fcomp st(0),st(1)
gamemd.exe+1F54F0: DF E0                    - fnstsw ax
gamemd.exe+1F54F2: F6 C4 01                 - test ah,01
gamemd.exe+1F54F5: DD D8                    - fstp st(0)
gamemd.exe+1F54F7: 74 0C                    - je gamemd.exe+1F5505
gamemd.exe+1F54F9: C7 44 24 10 03 00 00 00  - mov [esp+10],00000003
gamemd.exe+1F5501: EB 02                    - jmp gamemd.exe+1F5505
gamemd.exe+1F5503: DD D8                    - fstp st(0)
gamemd.exe+1F5505: 8B C2                    - mov eax,edx
gamemd.exe+1F5507: 8B 17                    - mov edx,[edi]
// ---------- INJECTING HERE ----------
gamemd.exe+1F5509: 2B C2                    - sub eax,edx
// ---------- DONE INJECTING  ----------
gamemd.exe+1F550B: 85 C0                    - test eax,eax
gamemd.exe+1F550D: 89 46 6C                 - mov [esi+6C],eax
gamemd.exe+1F5510: 0F 8F D4 00 00 00        - jg gamemd.exe+1F55EA
gamemd.exe+1F5516: 8B 16                    - mov edx,[esi]
gamemd.exe+1F5518: 8B CE                    - mov ecx,esi
gamemd.exe+1F551A: FF 52 2C                 - call dword ptr [edx+2C]
gamemd.exe+1F551D: 83 F8 0F                 - cmp eax,0F
gamemd.exe+1F5520: 0F 85 C4 00 00 00        - jne gamemd.exe+1F55EA
gamemd.exe+1F5526: 84 DB                    - test bl,bl
gamemd.exe+1F5528: 0F 85 BC 00 00 00        - jne gamemd.exe+1F55EA
}
</AssemblerScript>
      <CheatEntries>
        <CheatEntry>
          <ID>24</ID>
          <Description>"To Player"</Description>
          <DropDownList>0:0%
0.25:25%
0.5:50%
1.0:100%
1.5:150%
2.0:200%
</DropDownList>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>Float</VariableType>
          <Address>dmgToPlrMul</Address>
        </CheatEntry>
        <CheatEntry>
          <ID>25</ID>
          <Description>"To Enemy"</Description>
          <DropDownListLink>To Player</DropDownListLink>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>Float</VariableType>
          <Address>dmgToNmeMul</Address>
        </CheatEntry>
        <CheatEntry>
          <ID>26</ID>
          <Description>"Instant Kill"</Description>
          <DropDownList ReadOnly="1" DescriptionOnly="1" DisplayValueAsItem="1">0:Off
1:On
</DropDownList>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>Byte</VariableType>
          <Address>instKill</Address>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
    <CheatEntry>
      <ID>27</ID>
      <Description>"Damage"</Description>
      <Options moHideChildren="1" moDeactivateChildrenAsWell="1" moAllowManualCollapseAndExpand="1"/>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{ Game   :cd Yuri's Revenge
  Version:
  Date   : 2024-03-10
  Author : User

  This script does blah blah blah
}

[ENABLE]

aobscanmodule(unitDmgAOB,gamemd.exe,89 46 6C 0F 8F D4 00 00 00) // should be unique
alloc(newmem,$1000)
alloc(noDmg,1)
alloc(instKill,1)

label(code)
label(return)

noDmg:
  db 1
instKill:
  db 0

newmem:
  cmp byte ptr [instKill],1
  jne @f
  cmp [esi+41C],0
  je @f
  mov eax,0
@@:
  cmp byte ptr [noDmg],1
  jne @f
  cmp [esi+41C],0
  je code
@@:
  mov [esi+6C],eax
code:
//  mov [esi+6C],eax
  jg gamemd.exe+1F55EA
  jmp return

unitDmgAOB:
  jmp newmem
  nop 4
return:
registersymbol(unitDmgAOB)
registersymbol(noDmg)
registersymbol(instKill)

[DISABLE]

unitDmgAOB:
  db 89 46 6C 0F 8F D4 00 00 00

unregistersymbol(unitDmgAOB)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: gamemd.exe+1F550D

gamemd.exe+1F54F2: F6 C4 01                 - test ah,01
gamemd.exe+1F54F5: DD D8                    - fstp st(0)
gamemd.exe+1F54F7: 74 0C                    - je gamemd.exe+1F5505
gamemd.exe+1F54F9: C7 44 24 10 03 00 00 00  - mov [esp+10],00000003
gamemd.exe+1F5501: EB 02                    - jmp gamemd.exe+1F5505
gamemd.exe+1F5503: DD D8                    - fstp st(0)
gamemd.exe+1F5505: 8B C2                    - mov eax,edx
gamemd.exe+1F5507: 8B 17                    - mov edx,[edi]
gamemd.exe+1F5509: 2B C2                    - sub eax,edx
gamemd.exe+1F550B: 85 C0                    - test eax,eax
// ---------- INJECTING HERE ----------
gamemd.exe+1F550D: 89 46 6C                 - mov [esi+6C],eax
// ---------- DONE INJECTING  ----------
gamemd.exe+1F5510: 0F 8F D4 00 00 00        - jg gamemd.exe+1F55EA
gamemd.exe+1F5516: 8B 16                    - mov edx,[esi]
gamemd.exe+1F5518: 8B CE                    - mov ecx,esi
gamemd.exe+1F551A: FF 52 2C                 - call dword ptr [edx+2C]
gamemd.exe+1F551D: 83 F8 0F                 - cmp eax,0F
gamemd.exe+1F5520: 0F 85 C4 00 00 00        - jne gamemd.exe+1F55EA
gamemd.exe+1F5526: 84 DB                    - test bl,bl
gamemd.exe+1F5528: 0F 85 BC 00 00 00        - jne gamemd.exe+1F55EA
gamemd.exe+1F552E: 8B 86 C0 06 00 00        - mov eax,[esi+000006C0]
gamemd.exe+1F5534: 8A 88 AC 0E 00 00        - mov cl,[eax+00000EAC]
}
</AssemblerScript>
      <CheatEntries>
        <CheatEntry>
          <ID>30</ID>
          <Description>"To Player"</Description>
          <DropDownList ReadOnly="1" DescriptionOnly="1" DisplayValueAsItem="1">0:Off
1:On
</DropDownList>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>Byte</VariableType>
          <Address>noDmg</Address>
        </CheatEntry>
        <CheatEntry>
          <ID>29</ID>
          <Description>"Instant Kill"</Description>
          <DropDownList ReadOnly="1" DescriptionOnly="1" DisplayValueAsItem="1">0:Off
1:On
</DropDownList>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>Byte</VariableType>
          <Address>instKill</Address>
        </CheatEntry>
      </CheatEntries>
    </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>
