<?xml version="1.0" encoding="utf-8"?>
<CheatTable CheatEngineTableVersion="51">
  <CheatEntries>
    <CheatEntry>
      <ID>3</ID>
      <Description>"Enable Code"</Description>
      <Options moHideChildren="1" moDeactivateChildrenAsWell="1"/>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>[ENABLE]
aobscanmodule(aob_1, FatalFrameII.exe, 66 0F 6E 48 14 0F 5B C9 66)
aobscanmodule(aob_2, FatalFrameII.exe, 48 8B 91 C0 02 00 00)
alloc(MasterMem, 500, aob_2)

label(pBase pXVelocity pYVelocity pPlayerHP newmem_1 Return1 OriCode1 newmem_2 Return2 Skip2 OriCode2)

registersymbol(aob_1 aob_2 pBase pXVelocity pPlayerHP OriCode1 OriCode2)

MasterMem:
pBase:
  dq 0

align 10 CC
pYVelocity:
  dq 0

align 10 CC
pXVelocity:
  dq 0

align 10 CC
pPlayerHP:
  dd 0

align 10 CC
newmem_1:
  mov [pBase],rax
  cmp byte ptr[pPlayerHP],01
  jne OriCode1
  fild dword ptr[rax+18]
  fistp dword ptr[rax+14]
OriCode1:
  readmem(aob_1, 5)
  jmp Return1

align 10 CC
newmem_2:
  push rax
  mov rax,[pBase]
  cmp rax,[rcx+000002B0] // (rcx+2C0) - 10
  jne Skip2

  push rdx
  mov rdx,[rcx+000002F0] // (rcx+2C0) + 30
  mov [pYVelocity],rdx
  mov rdx,[rcx+00000050] // (rcx+90) - 40
  mov [pXVelocity],rdx
  pop rdx

Skip2:
  pop rax
OriCode2:
  readmem(aob_2, 7)
  jmp Return2

aob_1:
  jmp newmem_1
Return1:

aob_2:
  jmp newmem_2
  nop 2
Return2:


[DISABLE]
aob_1:
  readmem(OriCode1, 5)

aob_2:
  readmem(OriCode2, 7)

unregistersymbol(*)
dealloc(MasterMem)
</AssemblerScript>
      <CheatEntries>
        <CheatEntry>
          <ID>13</ID>
          <Description>"Infinite HP"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
//code from here to '[DISABLE]' will be used to enable the cheat
pPlayerHP:
db 01
 
 
[DISABLE]
//code from here till the end of the code will be used to disable the cheat
pPlayerHP:
db 00
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>20</ID>
          <Description>"Infinite WillPower"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]

aobscanmodule(pWillPower,FatalFrameII.exe,66 0F 6E 50 10) // should be unique
alloc(newmem,100,pWillPower)

label(pOriWillCode return)

newmem:
fild dword ptr[rax+14]
fistp dword ptr[rax+10]

pOriWillCode:
readmem(pWillPower,5)
  //movd xmm2,[rax+10]
  jmp return

pWillPower:
  jmp newmem
return:
registersymbol(pWillPower pOriWillCode)

[DISABLE]

pWillPower:
readmem(pOriWillCode,5)
  //db 66 0F 6E 50 10

unregistersymbol(*)
dealloc(newmem)
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>0</ID>
          <Description>"Instant Camera Obscura"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]

aobscanmodule(pOriCamCD,FatalFrameII.exe,F3 0F 10 4F 08 F3 41 0F 5C C8) // should be unique
alloc(newmem,100,pOriCamCD)

label(pNormalCam pInstaCam return)

newmem:

pNormalCam:
readmem(pOriCamCD,5)
  //movss xmm1,[rdi+08]
comiss xmm1,[pInstaCam]
jbe @f
movss xmm1,[pInstaCam]
movss [rdi+08],xmm1
@@:

jmp return

align 10 CC
pInstaCam:
dq (float)0.01

pOriCamCD:
  jmp newmem
return:
registersymbol(pOriCamCD pNormalCam)

[DISABLE]

pOriCamCD:
readmem(pNormalCam,5)
  //db F3 0F 10 4F 08

unregistersymbol(*)
dealloc(newmem)
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>1</ID>
          <Description>"Player Move"</Description>
          <Options moHideChildren="1"/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]

aobscanmodule(pPlayerMoveOri,FatalFrameII.exe,0F 29 99 80 00 00 00) // should be unique
alloc(newmem,100,pPlayerMoveOri)

label(pSpeedOriCode pPlayerSpeed return)

newmem:
pSpeedOriCode:
readmem(pPlayerMoveOri,7)
  //movaps [rcx+00000080],xmm3
  cmp dword ptr[pPlayerSpeed],00
  jng @f
  push rax
  mov rax,[pXVelocity]
  cmp rax,rcx
  pop rax
  jne @f
  fld dword ptr [rcx+80]
  fmul dword ptr [pPlayerSpeed]
  fstp dword ptr [rcx+80]
  fld dword ptr [rcx+88]
  fmul dword ptr [pPlayerSpeed]
  fstp dword ptr [rcx+88]

@@:
  jmp return

align 10 CC
pPlayerSpeed:
dq (float)1.75

pPlayerMoveOri:
  jmp newmem
  nop 2
return:
registersymbol(pPlayerMoveOri pSpeedOriCode pPlayerSpeed)

[DISABLE]

pPlayerMoveOri:
readmem(pSpeedOriCode,7)
  //db 0F 29 99 80 00 00 00

unregistersymbol(*)
dealloc(newmem)
</AssemblerScript>
          <CheatEntries>
            <CheatEntry>
              <ID>4</ID>
              <Description>"Set Speed"</Description>
              <ShowAsSigned>0</ShowAsSigned>
              <VariableType>Float</VariableType>
              <Address>pPlayerSpeed</Address>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
        <CheatEntry>
          <ID>5</ID>
          <Description>"Damage Multiplier"</Description>
          <Options moHideChildren="1"/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
aobscanmodule(aob_damage, FatalFrameII.exe, 01 51 44 C6 81 C4 00 00 00 01)
alloc(newmem_damage, 500, aob_damage)

label(check_max original_damage return_damage pMultiplier pMaxToggle)

registersymbol(aob_damage pMultiplier original_damage)

newmem_damage:
  push rax
  mov rax,[pBase]
  cmp rax,rcx
  pop rax
  je original_damage

  cmp dword ptr [pMultiplier],00
  jng check_max
  push rdx
  fild dword ptr [rsp]
  fmul dword ptr [pMultiplier]
  fistp dword ptr [rsp]
  pop rdx

check_max:
  cmp dword ptr [pMaxToggle],01
  jne original_damage
  xor edx,edx
  mov [rcx+44],000F423F

original_damage:
  readmem(aob_damage, 10)
  jmp return_damage

align 10 CC
pMaxToggle:
  dd 00
pMultiplier:
  dq (float)2.0

aob_damage:
  jmp newmem_damage
  nop 5
return_damage:


[DISABLE]
aob_damage:
  readmem(original_damage, 10)

unregistersymbol(*)
dealloc(newmem_damage)
</AssemblerScript>
          <CheatEntries>
            <CheatEntry>
              <ID>6</ID>
              <Description>"Set Damage"</Description>
              <ShowAsSigned>0</ShowAsSigned>
              <VariableType>Float</VariableType>
              <Address>pMultiplier</Address>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
        <CheatEntry>
          <ID>7</ID>
          <Description>"Defense Multiplier"</Description>
          <Options moHideChildren="1"/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
aobscanmodule(aob_defense, FatalFrameII.exe, 01 53 44 C6 83 C4 00 00 00 01)
alloc(newmem_defense, 500, aob_defense)

label(skip_defense original_defense return_defense pDefMultiplier)

registersymbol(aob_defense pDefMultiplier original_defense)

newmem_defense:
  cmp dword ptr [pDefMultiplier],00
  jng skip_defense
  push rdx
  fild dword ptr [rsp]
  fdiv dword ptr [pDefMultiplier]
  fistp dword ptr [rsp]
  pop rdx

skip_defense:
original_defense:
  readmem(aob_defense, 10)
  jmp return_defense

  align 10 CC
pDefMultiplier:
  dd (float)2.0

aob_defense:
  jmp newmem_defense
  nop 5
return_defense:

[DISABLE]
aob_defense:
  readmem(original_defense, 10)

unregistersymbol(*)
dealloc(newmem_defense)
</AssemblerScript>
          <CheatEntries>
            <CheatEntry>
              <ID>8</ID>
              <Description>"Set Defense"</Description>
              <ShowAsSigned>0</ShowAsSigned>
              <VariableType>Float</VariableType>
              <Address>pDefMultiplier</Address>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
        <CheatEntry>
          <ID>9</ID>
          <Description>"Score Multiplier"</Description>
          <Options moHideChildren="1"/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
aobscanmodule(aob_scoremult, FatalFrameII.exe, F3 0F 10 BB 64 03 00 00)
alloc(newmem_scoremult, 500, aob_scoremult)

label(skip_scoremult original_scoremult return_scoremult pScoreMultiplier)

registersymbol(aob_scoremult pScoreMultiplier original_scoremult)

newmem_scoremult:
original_scoremult:
  readmem(aob_scoremult, 8)

  cmp dword ptr [pScoreMultiplier],00
  jng skip_scoremult
  mulss xmm7,[pScoreMultiplier]
  movss [rbx+00000364],xmm7

skip_scoremult:
  jmp return_scoremult

  align 10 CC
pScoreMultiplier:
  dd (float)2.0

aob_scoremult:
  jmp newmem_scoremult
  nop 3
return_scoremult:

[DISABLE]
aob_scoremult:
  readmem(original_scoremult, 8)

unregistersymbol(*)
dealloc(newmem_scoremult)
</AssemblerScript>
          <CheatEntries>
            <CheatEntry>
              <ID>10</ID>
              <Description>"Set Score"</Description>
              <ShowAsSigned>0</ShowAsSigned>
              <VariableType>Float</VariableType>
              <Address>pScoreMultiplier</Address>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
        <CheatEntry>
          <ID>28</ID>
          <Description>"Infinite Prayer Breads (need at least 1 prayer breads)"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
aobscanmodule(pPrayerBeads,FatalFrameII.exe,01 86 20 01 00 00) // should be unique
aobscanmodule(pBreadsSet,FatalFrameII.exe,41 89 84 24 20 01 00 00) // should be unique
alloc(newmem,100,pPrayerBeads)

label(pOriBreadsPrayer pBreads return1 pSecondMem pOriBreadsSet return2)

newmem:
mov eax,[pBreads]

pOriBreadsPrayer:
readmem(pPrayerBeads,6)
  //add [rsi+00000120],eax
  jmp return1

align 10 CC
pSecondMem:
mov eax,[pBreads]

pOriBreadsSet:
readmem(pBreadsSet,8)
  //mov [r12+00000120],eax
  jmp return2

align 10 CC
pBreads:
dd 00

pPrayerBeads:
  jmp newmem
  nop
return1:

pBreadsSet:
  jmp pSecondMem
  nop 3
return2:
registersymbol(pPrayerBeads pBreadsSet pOriBreadsPrayer pOriBreadsSet)

[DISABLE]

pPrayerBeads:
readmem(pOriBreadsPrayer,6)
  //db 01 86 20 01 00 00

pBreadsSet:
readmem(pOriBreadsSet,8)
  //db 41 89 84 24 20 01 00 00

unregistersymbol(*)
dealloc(newmem)
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>30</ID>
          <Description>"Infinite Films/Items (still decrease until u only have 1 left)"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]

aobscanmodule(pItemStock,FatalFrameII.exe,2B C6 89 43 08) // should be unique
alloc(newmem,100,pItemStock)

label(pSubCode return pInfItems pOriNormalItems)

newmem:
cmp eax,[pInfItems]
jng @f
reassemble(pItemStock)
//sub eax,esi
jmp pSubCode

@@:
mov eax,[pInfItems]
pSubCode:
reassemble(pItemStock+2,3)
  //mov [rbx+08],eax
  jmp return

align 10 CC
pOriNormalItems:
readmem(pItemStock,5)

align 10 CC
pInfItems:
dd 01

pItemStock:
  jmp newmem
return:
registersymbol(pItemStock pOriNormalItems)

[DISABLE]

pItemStock:
readmem(pOriNormalItems,5)
  //db 2B C6 89 43 08

unregistersymbol(*)
dealloc(newmem)
</AssemblerScript>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
  </CheatEntries>
  <UserdefinedSymbols/>
</CheatTable>
