LordEventHorizon wrote: ↑Fri Dec 10, 2021 9:27 pm
First of all I want to apologize for the late reply, I'm really busy this month and haven't got a lot of time for much else, so sorry about that.
I'm not sure why, it seems that whenever I load up a table in this game the values of everything in CE changes for some reason. As I said I'm a complete newbie to this, so I honestly do not know why that is.
That being said, even if the values change they are still relative to one another no matter how much they change. So in other words, if you find the value for an item on my list (like medicine or dis-poison) then the remaining items on the list will now be the new value of Medicine + how much more than it originally was. Or to put it in a simpler example, if Medicine was originally 1 and Bead of Life was 10, then if Medicine new address got changed to 91, then Bead of Life will be guaranteed to be 100, as the value between them is a constant.
Should be possible to make something that update the rest of the values automatically in response to finding one, assuming it hasn't already been made.
Try these (I made a small mod of your table):
Search for Money
Code: Select all
<?xml version="1.0" encoding="utf-8"?>
<CheatTable>
<CheatEntries>
<CheatEntry>
<ID>273</ID>
<Description>"Money Finder"</Description>
<Options moHideChildren="1"/>
<LastState Activated="1"/>
<VariableType>Auto Assembler Script</VariableType>
<AssemblerScript>{ Game : smt3hd.exe
Author : Anon-9
This script finds money when the menu is opened and money is displayed
}
[ENABLE]
aobscanmodule(fMoneyBaseFinder_Finder,GameAssembly.dll,48 4C 8D 44 24 30 45) // should be unique
alloc(newmem,$1000,fMoneyBaseFinder_Finder)
label(code)
label(return)
label(fMoneyBaseFinder)
label(ptrMoneyBase)
newmem:
code:
mov [ptrMoneyBase],rax
lea r8,[rsp+30]
jmp return
ptrMoneyBase:
dq 0
registersymbol(ptrMoneyBase)
fMoneyBaseFinder_Finder+01:
fMoneyBaseFinder:
jmp newmem
return:
registersymbol(fMoneyBaseFinder)
[DISABLE]
fMoneyBaseFinder:
db 4C 8D 44 24 30
unregistersymbol(fMoneyBaseFinder)
dealloc(newmem)
</AssemblerScript>
<CheatEntries>
<CheatEntry>
<ID>274</ID>
<Description>"Money Base"</Description>
<LastState Value="7188" RealAddress="25A95EBAD68"/>
<ShowAsSigned>0</ShowAsSigned>
<VariableType>4 Bytes</VariableType>
<Address>ptrMoneyBase</Address>
<Offsets>
<Offset>48</Offset>
</Offsets>
</CheatEntry>
</CheatEntries>
</CheatEntry>
</CheatEntries>
</CheatTable>
Make Some items Infinite (Minimum of 5 items)
Code: Select all
<?xml version="1.0" encoding="utf-8"?>
<CheatTable>
<CheatEntries>
<CheatEntry>
<ID>275</ID>
<Description>"Inf Items 1"</Description>
<LastState Activated="1"/>
<VariableType>Auto Assembler Script</VariableType>
<AssemblerScript>{ Game : smt3hd.exe
Author : Anon-9
This script attempts to make it so that items over a certain value are
}
[ENABLE]
aobscanmodule(fSetItemsIfMin,GameAssembly.dll,0F B6 4C 38 20 31) // should be unique
alloc(newmem,$1000,fSetItemsIfMin)
label(code)
label(return)
newmem:
code:
movzx ecx,byte ptr [rax+rdi+20]
cmp ecx,#5 //5 should be enough to avoid most key items
jl return //Jump if item is less than above (to prevent accidentals)
mov ecx,#15 //Unsure what the item cap should be, so using 15
mov byte ptr [rax+rdi+20],cl
test esi,esi
jns return //jump if esi is negative (esi will be added later)
xor esi,esi //make esi 0 if negative
jmp return
fSetItemsIfMin:
jmp newmem
return:
registersymbol(fSetItemsIfMin)
[DISABLE]
fSetItemsIfMin:
db 0F B6 4C 38 20
unregistersymbol(fSetItemsIfMin)
dealloc(newmem)
</AssemblerScript>
</CheatEntry>
</CheatEntries>
</CheatTable>
Search for the value of Medicine
Code: Select all
<?xml version="1.0" encoding="utf-8"?>
<CheatTable>
<CheatEntries>
<CheatEntry>
<ID>276</ID>
<Description>"Items Base"</Description>
<Options moHideChildren="1"/>
<LastState/>
<VariableType>Auto Assembler Script</VariableType>
<AssemblerScript>{ Game : smt3hd.exe
Author : Anon-9
This script searches for Medicine address
}
[ENABLE]
aobscanmodule(fFindItemBaseFinder,GameAssembly.dll,02 00 00 48 63 C3 80 7C 10 20 00) // should be unique
alloc(newmem,$1000,fFindItemBaseFinder)
//globalalloc(ptrItemBase,8)
label(code)
label(return)
label(fFindItemBase)
label(ptrItemBase)
newmem:
code:
mov [ptrItemBase],rdx
cmp byte ptr [rax+rdx+20],00
jmp return
ptrItemBase:
dq 0
registersymbol(ptrItemBase)
fFindItemBaseFinder+06:
fFindItemBase:
jmp newmem
return:
registersymbol(fFindItemBase)
[DISABLE]
fFindItemBase:
db 80 7C 10 20 00
unregistersymbol(fFindItemBase)
dealloc(newmem)
</AssemblerScript>
<CheatEntries>
<CheatEntry>
<ID>277</ID>
<Description>"Medicine"</Description>
<LastState Value="49" RealAddress="25A97E81D22"/>
<ShowAsSigned>0</ShowAsSigned>
<VariableType>Byte</VariableType>
<Address>ptrItemBase</Address>
<Offsets>
<Offset>22</Offset>
</Offsets>
</CheatEntry>
</CheatEntries>
</CheatEntry>
</CheatEntries>
</CheatTable>
Set Moon Phase (On update) (Turn off before certain cutscenes/events/area changes) (You may be able to override instead). This can crash the game if the wrong moon phase is used. (Updated to fix for certain areas, shouldn't crash anymore).
Code: Select all
<?xml version="1.0" encoding="utf-8"?>
<CheatTable>
<CheatEntries>
<CheatEntry>
<ID>290</ID>
<Description>"Set Moon Phase on Change"</Description>
<Options moHideChildren="1"/>
<LastState Activated="1"/>
<VariableType>Auto Assembler Script</VariableType>
<AssemblerScript>{ Game : smt3hd.exe
Author : Anon-9
This script attempts to set the moon phase on change.
}
[ENABLE]
aobscanmodule(fSetMoonPhase,GameAssembly.dll,8B 48 14 FF C1 81) // should be unique
alloc(newmem,$1000,fSetMoonPhase)
label(code)
label(return)
label(varDesiredPhase)
newmem:
code:
cmp [varDesiredPhase],#32
je @f
mov ecx,[varDesiredPhase]
mov [rax+14],ecx
jmp return
@@:
mov ecx,[rax+14]
inc ecx
jmp return
varDesiredPhase:
dq 8
registersymbol(varDesiredPhase)
fSetMoonPhase:
jmp newmem
return:
registersymbol(fSetMoonPhase)
[DISABLE]
fSetMoonPhase:
db 8B 48 14 FF C1
unregistersymbol(fSetMoonPhase)
dealloc(newmem)
</AssemblerScript>
<CheatEntries>
<CheatEntry>
<ID>285</ID>
<Description>"Desired Moon Phase"</Description>
<DropDownList DescriptionOnly="1" DisplayValueAsItem="1">0:New Moon
1:1/8 Waxing
2:2/8 Waxing
3:3/8 Waxing
4:Half Waxing
5:5/8 Waxing
6:6/8 Waxing
7:7/8 Waxing
8:Full
9:7/8 Waning
10:6/8 Waning
11:5/8 Waning
12:Half Waning
13:3/8 Waning
14:2/8 Waning
15:1/8 Waning
32:Disable Override
</DropDownList>
<LastState Value="32" RealAddress="7FF8144F0025"/>
<ShowAsSigned>0</ShowAsSigned>
<VariableType>Byte</VariableType>
<Address>varDesiredPhase</Address>
</CheatEntry>
</CheatEntries>
</CheatEntry>
</CheatEntries>
</CheatTable>
Cursed Corridor scripts (Untested outside of corridor):
Code: Select all
<?xml version="1.0" encoding="utf-8"?>
<CheatTable>
<CheatEntries>
<CheatEntry>
<ID>294</ID>
<Description>"Reduced Cursed Corridor Damage/Max HP before damage"</Description>
<LastState Activated="1"/>
<VariableType>Auto Assembler Script</VariableType>
<AssemblerScript>{ Game : smt3hd.exe
Author : Anon-9
This script attempts to max hp on cursed corridor damage (Before damage)
}
[ENABLE]
aobscanmodule(fMaxHPOnCursedDamage_Finder,GameAssembly.dll,00 00 00 0F B7 71 16 B8 1F 85 EB 51) // should be unique
label(fMaxHPOnCursedDamage)
fMaxHPOnCursedDamage_Finder+03:
fMaxHPOnCursedDamage:
movzx esi,word ptr [rcx+18]
registersymbol(fMaxHPOnCursedDamage)
[DISABLE]
fMaxHPOnCursedDamage:
db 0F B7 71 16 B8 1F 85 EB 51
unregistersymbol(fMaxHPOnCursedDamage)
</AssemblerScript>
</CheatEntry>
<CheatEntry>
<ID>295</ID>
<Description>"No Cursed Corridor Damage"</Description>
<LastState Activated="1"/>
<VariableType>Auto Assembler Script</VariableType>
<AssemblerScript>{ Game : smt3hd.exe
Author : Anon-9
This script attempts to stop Cursed Corridor Damage
}
[ENABLE]
aobscanmodule(fNoCursedCorridorDamage_Finder,GameAssembly.dll,F3 5F 00 85 C0 75 09 8B C7 99 2B C2 D1 F8 8B F8 85 FF 41 0F 44 FE 2B F7) // should be unique
label(fNoCursedCorridorDamage)
fNoCursedCorridorDamage_Finder+16:
fNoCursedCorridorDamage:
xor edi,edi
registersymbol(fNoCursedCorridorDamage)
[DISABLE]
fNoCursedCorridorDamage:
db 2B F7 //41 0F 44 FE 2B F7
unregistersymbol(fNoCursedCorridorDamage)
</AssemblerScript>
</CheatEntry>
</CheatEntries>
</CheatTable>