1
"Dragon Quest XI S Definitive Edition (Steam)"
Auto Assembler Script
[ENABLE]
alloc(newmem,1024)
label(ItemListStartPtr)
registersymbol(ItemListStartPtr)
newmem:
ItemListStartPtr:
dq 0
[DISABLE]
unregistersymbol(ItemListStartPtr)
dealloc(newmem)
10
"Enable"
Auto Assembler Script
[ENABLE]
{
Code to Pull In Items (Found Starting Address Manually by searching for an item id)
local StartAddress = 0x39770000
local index = 0
while (index < 2730) do
local ItemName
if (ReadBytes(ReadPointer(StartAddress + 0x08)+0x16) == 0) and (ReadBytes(ReadPointer(StartAddress + 0x08)+0x18) == 0) then
ItemName = ansiToUtf8(readString(ReadPointer(StartAddress + 0x08)+0x15,50,true))
else
ItemName = readString(ReadPointer(StartAddress + 0x08)+0x15,50,false)
end
-- First, Print the Decimal Item ID
--print(string.format("%d",ReadQword(StartAddress)))
-- Second, Print the Hex Item ID
--print(string.format("%0.16X",ReadQword(StartAddress)))
-- Finally, Print the Item Name (Could Be Unicode)
--print(string.format("%s",ItemName))
--print(string.format("%d:%0.16X|%s",ReadQword(StartAddress),ReadQword(StartAddress),ItemName))
StartAddress = StartAddress + 0x20
index = index + 1
end
Item Start At 'mini medal' and end with 'Trodain's Top Trends'
}
{$lua}
lua_aobscan("EXPReadInStatusAOB",process,"8B 81 B0 00 00 00 C3 CC",1)
-- Another Attempt at Getting The ItemListStart Pointer using Pointer Scan to Find the Pointer
-- Found a Pointer for STEAM version at "DRAGON QUEST XI S.EXE" + 5C08210, Offset 220, Offset 70, Offset A0
local ItemListPtr1 = getAddress(process)
if (ItemListPtr1 ~= nil and ItemListPtr1 ~= 0) then
local ItemListPtr2 = ReadPointer(ItemListPtr1 + 0x05C08210)
if (ItemListPtr2 ~= nil and ItemListPtr2 ~= 0) then
local ItemListPtr3 = ReadPointer(ItemListPtr2 + 0x220)
if (ItemListPtr3 ~= nil and ItemListPtr3 ~= 0) then
local ItemListPtr4 = ReadPointer(ItemListPtr3 + 0x70)
if (ItemListPtr4 ~= nil and ItemListPtr4 ~= 0) then
local ItemListPtr5 = ReadPointer(ItemListPtr4 + 0xA0)
if (ItemListPtr5 ~= nil and ItemListPtr5 ~= 0) then
WritePointer(getAddress("ItemListStartPtr"),ItemListPtr5)
end
end
end
end
end
-- Found a Pointer for GAMEPASS version at "DRAGON QUEST XI S.EXE" + 5CA5F10, Offset 220, Offset 70, Offset A0
local ItemListPtrGP1 = getAddress(process)
if (ItemListPtrGP1 ~= nil and ItemListPtrGP1 ~= 0) then
local ItemListPtrGP2 = ReadPointer(ItemListPtrGP1 + 0x05CA5F10)
if (ItemListPtrGP2 ~= nil and ItemListPtrGP2 ~= 0) then
local ItemListPtrGP3 = ReadPointer(ItemListPtrGP2 + 0x220)
if (ItemListPtrGP3 ~= nil and ItemListPtrGP3 ~= 0) then
local ItemListPtrGP4 = ReadPointer(ItemListPtrGP3 + 0x70)
if (ItemListPtrGP4 ~= nil and ItemListPtrGP4 ~= 0) then
local ItemListPtrGP5 = ReadPointer(ItemListPtrGP4 + 0xA0)
if (ItemListPtrGP5 ~= nil and ItemListPtrGP5 ~= 0) then
WritePointer(getAddress("ItemListStartPtr"),ItemListPtrGP5)
end
end
end
end
end
-- This gets the starting point for the Item List to load at runtime
--lua_aobscan("ItemListStartAOB","","BA 16 00 00 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? BC 16 00 00 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? BB 16 00 00 00 00 00 00",1)
---Processing for the Huge Item Lists in 2 spots to cut down on file size
local al = getAddressList()
-- Load Item Dropdowns
local ItemList = {}
-- Get Item List From Memory at Runtime
--local StartAddress = getAddress("ItemListStartAOB")
local StartAddress = ReadPointer(getAddress("ItemListStartPtr"))
local index = 0
while (index < 2730) do
if (ReadBytes(ReadPointer(StartAddress + 0x08)+0x16) == 0) and (ReadBytes(ReadPointer(StartAddress + 0x08)+0x18) == 0) then
ItemList[index+1] = string.format("%0.16X",ReadQword(StartAddress))..":"..string.format("%s",ansiToUtf8(readString(ReadPointer(StartAddress + 0x08)+0x15,50,true)))
else
ItemList[index+1] = string.format("%0.16X",ReadQword(StartAddress))..":"..string.format("%s",readString(ReadPointer(StartAddress + 0x08)+0x15,50,false))
end
StartAddress = StartAddress + 0x20
index = index + 1
end
local DropDownListITM = createStringlist()
for i,j in ipairs(ItemList) do
DropDownListITM.add(string.format("%s",j))
end
local mr = al.getMemoryRecordByDescription("Highlighted Item ID")
al[mr.Index].DropDownList.Text = DropDownListITM.Text
al[mr.Index].DropDownReadOnly = false
al[mr.Index].DropDownDescriptionOnly = true
al[mr.Index].DisplayAsDropDownListItem = true
local mr2 = al.getMemoryRecordByDescription("Shop Item 1 ID")
al[mr2.Index].DropDownList.Text = DropDownListITM.Text
al[mr2.Index].DropDownReadOnly = false
al[mr2.Index].DropDownDescriptionOnly = true
al[mr2.Index].DisplayAsDropDownListItem = true
{$asm}
aobscanmodule(GoldReadInStatusAOB,$process,5B C3 8B 83 C0 00 00 00 48 83 C4 20 5B C3 CC) // should be unique
registersymbol(GoldReadInStatusAOB)
alloc(newmem,1024,GoldReadInStatusAOB)
///
///aobscanmodule(EXPReadInStatusAOB,$process,8B 81 B0 00 00 00 C3 CC CC CC CC CC CC CC CC CC 8B 81 AC 00 00 00) // should be unique
///registersymbol(EXPReadInStatusAOB)
alloc(newmem2,1024,EXPReadInStatusAOB)
///
aobscanmodule(HighlightedItemReadInStatusAOB,$process,49 8B 14 C0 8B 72 18 03 DF) // should be unique
registersymbol(HighlightedItemReadInStatusAOB)
alloc(newmem3,1024,HighlightedItemReadInStatusAOB)
///
aobscanmodule(MedalsReadInStatusAOB,$process,44 8B 51 18 41 03 C2 3B C6 7F 0D) // should be unique
registersymbol(MedalsReadInStatusAOB)
alloc(newmem4,1024,MedalsReadInStatusAOB)
///
aobscanmodule(CheckDraconianQuestAOB,$process,0F B6 44 08 48 C3 CC) // should be unique
registersymbol(CheckDraconianQuestAOB)
alloc(newmem5,1024,CheckDraconianQuestAOB)
///
aobscanmodule(CheckDraconianQuestAOB2,$process,0F B6 44 08 48 C3 32 C0 C3) // should be unique
registersymbol(CheckDraconianQuestAOB2)
alloc(newmem6,1024,CheckDraconianQuestAOB2)
///
label(GoldBasePtr)
registersymbol(GoldBasePtr)
label(originalcode)
label(return)
///
label(CharBasePtr)
registersymbol(CharBasePtr)
label(originalcode2)
label(return2)
///
label(HighlightedItemBasePtr)
registersymbol(HighlightedItemBasePtr)
label(originalcode2)
label(return3)
///
label(MiniMedalsBasePtr)
registersymbol(MiniMedalsBasePtr)
label(PearlsBasePtr)
registersymbol(PearlsBasePtr)
label(originalcode4)
label(return4)
///
label(return5)
label(return6)
label(DraconianQuestBasePtr)
registersymbol(DraconianQuestBasePtr)
label(TurnOffNoShopping)
registersymbol(TurnOffNoShopping)
label(TurnOffNoArmor)
registersymbol(TurnOffNoArmor)
label(TurnOffReducedEXP)
registersymbol(TurnOffReducedEXP)
///
newmem:
mov [GoldBasePtr],rbx
originalcode:
mov eax,[rbx+000000C0]
jmp return
GoldBasePtr:
dq 0
///
newmem2:
mov [CharBasePtr],rcx
originalcode2:
mov eax,[rcx+000000B0]
jmp return2
CharBasePtr:
dq 0
///
newmem3:
mov rdx,[r8+rax*8]
mov [HighlightedItemBasePtr],rdx
originalcode3:
mov esi,[rdx+18]
jmp return3
HighlightedItemBasePtr:
dq 0
///
newmem4:
cmp r8,16BA
jne SkipMiniMedalPtr
mov [MiniMedalsBasePtr],rcx
jmp originalcode4
SkipMiniMedalPtr:
cmp r8,16BC
jne originalcode4
mov [PearlsBasePtr],rcx
jmp originalcode4
originalcode4:
mov r10d,[rcx+18]
add eax,r10d
jmp return4
MiniMedalsBasePtr:
dq 0
PearlsBasePtr:
dq 0
///
newmem5:
mov [DraconianQuestBasePtr],rcx
cmp [TurnOffNoShopping],1
jne SkipTurnOffNoShopping
cmp rax,1
jne SkipTurnOffNoShopping
xor eax,eax
jmp return5
SkipTurnOffNoShopping:
cmp [TurnOffNoArmor],1
jne SkipTurnOffNoArmor
cmp rax,2
jne SkipTurnOffNoArmor
xor eax,eax
jmp return5
SkipTurnOffNoArmor:
cmp [TurnOffReducedEXP],1
jne originalcode5
cmp rax,7
jne originalcode5
xor eax,eax
jmp return5
originalcode5:
movzx eax,byte ptr [rax+rcx+48]
jmp return5
DraconianQuestBasePtr:
dq 0
TurnOffNoShopping:
dq 0
TurnOffNoArmor:
dq 0
TurnOffReducedEXP:
dq 0
newmem6:
cmp [TurnOffReducedEXP],1
jne originalcode6
cmp rax,7
jne originalcode6
xor eax,eax
jmp return6
originalcode6:
movzx eax,byte ptr [rax+rcx+48]
jmp return6
GoldReadInStatusAOB+2:
jmp newmem
nop
return:
///
EXPReadInStatusAOB:
jmp newmem2
nop
return2:
///
HighlightedItemReadInStatusAOB:
jmp newmem3
nop
nop
return3:
///
MedalsReadInStatusAOB:
jmp newmem4
nop
nop
return4:
///
CheckDraconianQuestAOB:
jmp newmem5
return5:
///
CheckDraconianQuestAOB2:
jmp newmem6
return6:
[DISABLE]
GoldReadInStatusAOB+2:
db 8B 83 C0 00 00 00
unregistersymbol(GoldBasePtr)
unregistersymbol(GoldReadInStatusAOB)
///
EXPReadInStatusAOB:
db 8B 81 B0 00 00 00
unregistersymbol(CharBasePtr)
unregistersymbol(EXPReadInStatusAOB)
///
HighlightedItemReadInStatusAOB:
db 49 8B 14 C0 8B 72 18
unregistersymbol(HighlightedItemBasePtr)
unregistersymbol(HighlightedItemReadInStatusAOB)
///
MedalsReadInStatusAOB:
db 44 8B 51 18 41 03 C2
unregistersymbol(MedalsReadInStatusAOB)
unregistersymbol(MiniMedalsBasePtr)
///
CheckDraconianQuestAOB:
db 0F B6 44 08 48
unregistersymbol(CheckDraconianQuestAOB)
unregistersymbol(DraconianQuestBasePtr)
unregistersymbol(TurnOffNoArmor)
unregistersymbol(TurnOffNoShopping)
unregistersymbol(TurnOffReducedEXP)
///
CheckDraconianQuestAOB2:
db 0F B6 44 08 48
unregistersymbol(CheckDraconianQuestAOB2)
///
dealloc(newmem)
dealloc(newmem2)
dealloc(newmem3)
dealloc(newmem4)
dealloc(newmem5)
dealloc(newmem6)
100
"[Scripts]"
1
200
"Damage Modifier Script (FOR 3D MODE) (God Mode, One Hit Kill, etc.)"
Auto Assembler Script
[ENABLE]
aobscanmodule(DamageModAOB,$process,8B 47 7C 3B C6 7C 04 2B C6) // should be unique
registersymbol(DamageModAOB)
alloc(newmem,1024,DamageModAOB)
label(return)
label(GodMode)
registersymbol(GodMode)
label(OneHitKill)
registersymbol(OneHitKill)
label(fEnemyDamageMult)
registersymbol(fEnemyDamageMult)
label(fHeroDamageMult)
registersymbol(fHeroDamageMult)
label(HeroCannotDie)
registersymbol(HeroCannotDie)
newmem:
mov eax,[rdi+7C]
cmp word ptr [rdi+70],0
je EnemyHit
HeroHit:
HeroDamageHit:
cmp [fHeroDamageMult],(float)0.0
je CheckGodMode
push esi
fild dword ptr [rsp]
fmul dword ptr [fHeroDamageMult]
fistp dword ptr [rsp]
pop esi
CheckGodMode:
cmp [GodMode],1
jne CheckHeroCannotDie
xor esi,esi
jmp CleanUp
CheckHeroCannotDie:
cmp [HeroCannotDie],1
jne CleanUp
cmp esi,eax
jl @F
xor esi,esi
@@:
jmp CleanUp
EnemyHit:
EnemyDamageHit:
cmp [fEnemyDamageMult],(float)0.0
je CheckOneHitKill
push esi
fild dword ptr [rsp]
fmul dword ptr [fEnemyDamageMult]
fistp dword ptr [rsp]
pop esi
CheckOneHitKill:
cmp [OneHitKill],1
jne CleanUp
mov esi,#99999
jmp CleanUp
CleanUp:
cmp eax,esi
jmp return
GodMode:
dq 0
OneHitKill:
dq 0
fEnemyDamageMult:
dq (float)0.0
fHeroDamageMult:
dq (float)0.5
HeroCannotDie:
dq 1
DamageModAOB:
jmp newmem
return:
[DISABLE]
DamageModAOB:
db 8B 47 7C 3B C6
unregistersymbol(DamageModAOB)
unregistersymbol(GodMode)
unregistersymbol(OneHitKill)
unregistersymbol(fEnemyDamageMult)
unregistersymbol(fHeroDamageMult)
dealloc(newmem)
201
"God Mode"
0:Off
1:On
4 Bytes
GodMode
202
"Hero Damage Multiplier (Set to 0.0 = Off; Otherwise multiplier so 0.5 is half damage to hero party)"
Float
fHeroDamageMult
204
"Hero Cannot Die (If On and God Mode Off, Then You Take Damage Until The Hit Will Kill You)"
0:Off
1:On
4 Bytes
HeroCannotDie
205
"One Hit Kill"
0:Off
1:On
4 Bytes
OneHitKill
206
"Enemy Damage Multiplier (Set to Zero = Off; Otherwise multiplier to damage you deal to enemies)"
Float
fEnemyDamageMult
210
"MP Damage Modifier (FOR 3D MODE) (Infinite MP, HeroMPDamageMult)"
Auto Assembler Script
[ENABLE]
aobscanmodule(BattleMPModAOB,$process,8B 93 80 00 00 00 41 B0 01 F3 0F 2C C1) // should be unique
registersymbol(BattleMPModAOB)
alloc(newmem,1024,BattleMPModAOB)
label(return)
label(InfiniteMP)
registersymbol(InfiniteMP)
label(fHeroMPDamageMult)
registersymbol(fHeroMPDamageMult)
newmem:
mov edx,[rbx+00000080]
mov r8l,01
cvttss2si eax,xmm1
cmp word ptr [rbx+70],0
je EnemyMPHit
HeroMPHit:
cmp eax,0
jle return
CheckHeroMPDamageMult:
cmp [fHeroMPDamageMult],(float)0.0
je CheckInfiniteMP
push eax
fild dword ptr [rsp]
fmul dword ptr [fHeroMPDamageMult]
fistp dword ptr [rsp]
pop eax
CheckInfiniteMP:
cmp [InfiniteMP],1
jne return
xor eax,eax
jmp return
EnemyMPHit:
jmp return
InfiniteMP:
dq 0
fHeroMPDamageMult:
dq (float)0.50
BattleMPModAOB:
jmp newmem
nop
nop
nop
nop
nop
nop
nop
nop
return:
[DISABLE]
BattleMPModAOB:
db 8B 93 80 00 00 00 41 B0 01 F3 0F 2C C1
unregistersymbol(BattleMPModAOB)
unregistersymbol(InfiniteMP)
unregistersymbol(fHeroMPDamageMult)
dealloc(newmem)
211
"Infinite MP"
0:Off
1:On
4 Bytes
InfiniteMP
212
"Hero MP Damage Multiplier (Set to 0.0 = Off; Otherwise multiplier so 0.5 is half MP damage to hero party)"
Float
fHeroMPDamageMult
215
"Gold Multiplier (After Battle) (For 3D and 2D Modes)"
Auto Assembler Script
[ENABLE]
aobscanmodule(GoldMultAOB,$process,03 91 C0 00 00 00 48 8B D9 E8 ?? ?? ?? ?? 48 8B CB) // should be unique
registersymbol(GoldMultAOB)
alloc(newmem,1024,GoldMultAOB)
/// For 2D Mode Gold Multiplier
aobscanmodule(GoldMultAOB2,$process,01 51 38 44 8B 41 38 41 8B C0) // should be unique
registersymbol(GoldMultAOB2)
alloc(newmem2,1024,GoldMultAOB2)
///
label(return)
label(originalcode)
label(GoldMult)
registersymbol(GoldMult)
///
label(return2)
label(originalcode2)
newmem:
imul edx,[GoldMult]
originalcode:
add edx,[rcx+000000C0]
jmp return
GoldMult:
dd #100
newmem2:
imul edx,[GoldMult]
originalcode2:
add [rcx+38],edx
mov r8d,[rcx+38]
jmp return2
GoldMultAOB:
jmp newmem
nop
return:
GoldMultAOB2:
jmp newmem2
nop
nop
return2:
[DISABLE]
GoldMultAOB:
db 03 91 C0 00 00 00
unregistersymbol(GoldMult)
unregistersymbol(GoldMultAOB)
///
GoldMultAOB2:
db 01 51 38 44 8B 41 38
unregistersymbol(GoldMult2)
dealloc(newmem)
dealloc(newmem2)
216
"Gold Multiplier"
4 Bytes
GoldMult
220
"EXP Multiplier"
Auto Assembler Script
[ENABLE]
aobscanmodule(EXPMultAOB,$process,01 91 B0 00 00 00 C3 CC) // should be unique
registersymbol(EXPMultAOB)
alloc(newmem,1024,EXPMultAOB)
///
label(return)
label(originalcode)
label(EXPMult)
registersymbol(EXPMult)
newmem:
imul edx,dword ptr [EXPMult]
originalcode:
add [rcx+000000B0],edx
jmp return
EXPMult:
dq #5
EXPMultAOB:
jmp newmem
nop
return:
[DISABLE]
EXPMultAOB:
db 01 91 B0 00 00 00
unregistersymbol(EXPMult)
unregistersymbol(EXPMultAOB)
dealloc(newmem)
221
"EXP Multiplier"
4 Bytes
EXPMult
225
"Skill Point Cost Multiplier"
Auto Assembler Script
[ENABLE]
aobscanmodule(SPCostMultAOB1,$process,8B 46 38 89 43 4C 0F B6 46 44) // should be unique
registersymbol(SPCostMultAOB1)
alloc(newmem,1024,SPCostMultAOB1)
///
aobscanmodule(SPCostMultAOB2,$process,03 46 38 48 8B CB 8B D0 E8 ?? ?? ?? ?? 48 8B 5C 24 40) // should be unique
registersymbol(SPCostMultAOB2)
alloc(newmem2,1024,SPCostMultAOB2)
///
label(return)
label(originalcode)
label(ZeroSPCost)
registersymbol(ZeroSPCost)
label(fSPCostMult)
registersymbol(fSPCostMult)
newmem:
mov eax,[rsi+38]
CheckZeroSPCost1:
cmp [ZeroSPCost],1
jne DoSPCostMult1
xor eax,eax
jmp originalcode
DoSPCostMult1:
push eax
fild dword ptr [rsp]
fmul dword ptr [fSPCostMult]
fistp dword ptr [rsp]
pop eax
originalcode:
mov [rbx+4C],eax
jmp return
ZeroSPCost:
dq 0
fSPCostMult:
dq (float)0.50
newmem2:
push r15
mov r15d,[rsi+38]
CheckZeroSPCost2:
cmp [ZeroSPCost],1
jne DoSPCostMult2
xor r15d,r15d
jmp CleanUp2
DoSPCostMult2:
push r15d
fild dword ptr [rsp]
fmul dword ptr [fSPCostMult]
fistp dword ptr [rsp]
pop r15d
jmp CleanUp2
CleanUp2:
add eax,r15d
pop r15
originalcode2:
mov rcx,rbx
jmp return2
///
SPCostMultAOB1:
jmp newmem
nop
return:
SPCostMultAOB2:
jmp newmem2
nop
return2:
[DISABLE]
SPCostMultAOB1:
db 8B 46 38 89 43 4C
unregistersymbol(fSPCostMult)
unregistersymbol(SPCostMultAOB1)
///
SPCostMultAOB2:
db 03 46 38 48 8B CB
unregistersymbol(SPCostMultAOB2)
dealloc(newmem)
dealloc(newmem2)
226
"Skills Cost Zero (Infinite Skill Points)"
0:Off
1:On
4 Bytes
ZeroSPCost
227
"Skill Point Cost Multiplier"
Float
fSPCostMult
235
"Infinite Item Usage / Set Minimum Item Amount (For 3D and 2D Modes)"
Auto Assembler Script
[ENABLE]
aobscanmodule(InfiniteItemUsageAOB,$process,8B 43 18 3B C5 7D 12 2B E8) // should be unique
alloc(newmem,1024,InfiniteItemUsageAOB)
registersymbol(InfiniteItemUsageAOB)
/// For 2D Mode Infinite Item Usage
aobscanmodule(InfiniteItemUsageAOB2,$process,0F B6 41 02 41 2B C1 83 F8 01) // should be unique
alloc(newmem2,1024,InfiniteItemUsageAOB2)
registersymbol(InfiniteItemUsageAOB2)
///
label(return)
label(originalcode)
label(SetItemAmount)
registersymbol(SetItemAmount)
///
label(return2)
label(originalcode2)
newmem:
xor ebp,ebp
mov eax,[rbx+18]
cmp word ptr [SetItemAmount],0
je originalcode
cmp eax,[SetItemAmount]
jge originalcode
mov eax,[SetItemAmount]
mov [rbx+18],eax
originalcode:
cmp eax,ebp
jmp return
SetItemAmount:
dq 0
newmem2:
xor r9d,r9d
movzx eax,byte ptr [rcx+02]
cmp byte ptr [SetItemAmount],0
je originalcode2
cmp eax,[SetItemAmount]
jge originalcode2
mov eax,[SetItemAmount]
mov [rcx+02],al
originalcode2:
movzx eax,byte ptr [rcx+02]
sub eax,r9d
jmp return2
///
InfiniteItemUsageAOB:
jmp newmem
return:
///
InfiniteItemUsageAOB2:
jmp newmem2
nop
nop
return2:
[DISABLE]
InfiniteItemUsageAOB:
db 8B 43 18 3B C5
unregistersymbol(SetItemAmount)
unregistersymbol(InfiniteItemUsageAOB)
///
InfiniteItemUsageAOB2:
db 0F B6 41 02 41 2B C1
unregistersymbol(InfiniteItemUsageAOB2)
dealloc(newmem)
dealloc(newmem2)
236
"Set Minimum Item Amount On Use/Sell (0 = Off)"
2 Bytes
SetItemAmount
240
"Shop Items (Override)"
Auto Assembler Script
[ENABLE]
aobscanmodule(ShopItemsAOB,$process,48 39 01 0F 84 4A 01 00 00 48 89 4C 24 58) // should be unique
registersymbol(ShopItemsAOB)
alloc(newmem,1024,ShopItemsAOB)
label(return)
label(ShopBasePtr)
registersymbol(ShopBasePtr)
newmem:
cmp rsi,0
jne originalcode
mov [ShopBasePtr],rcx
originalcode:
cmp [rcx],rax
je ShopItemsAOB+153
jmp return
ShopBasePtr:
dq 0
ShopItemsAOB:
jmp newmem
nop
nop
nop
nop
return:
[DISABLE]
ShopItemsAOB:
db 48 39 01 0F 84 4A 01 00 00
unregistersymbol(ShopBasePtr)
unregistersymbol(ShopItemsAOB)
dealloc(newmem)
241
"Shop Item 1 ID"
1
8 Bytes
ShopBasePtr
0
245
"Infinite Turns Good Status For Allies / Infinite Turns Bad Status For Enemies"
Auto Assembler Script
[ENABLE]
aobscanmodule(StatusTurnsAOB,$process,8B 83 EC 00 00 00 83 F8 01 7C 11) // should be unique
registersymbol(StatusTurnsAOB)
alloc(newmem,1024,StatusTurnsAOB)
label(return)
newmem:
test r13,r13
je originalcode
cmp word ptr [r13+70],0
je EnemyStatusHit
HeroStatusHit:
cmp [rbx+000000EC],FFFFFFFF
je originalcode
cmp [rbx+000000EC],0
je originalcode
cmp [rbx+000000D8],0 //pep-up, oomph
je AllyGoodStatus
CheckBadStatus:
cmp [rbx+000000E0],1 //paralyze, snooze
je AllyBadStatus
cmp [rbx+000000C0],0 //dance, laugh
je AllyBadStatus
jmp originalcode
AllyGoodStatus:
inc [rbx+000000EC]
jmp originalcode
AllyBadStatus:
mov eax,1
mov [rbx+000000EC],eax
jmp originalcode
EnemyStatusHit:
cmp [rbx+000000EC],FFFFFFFF
je originalcode
cmp [rbx+000000EC],0
je originalcode
cmp [rbx+000000D8],0 //pep-up, oomph
je EnemyGoodStatus
cmp [rbx+000000E0],1 //paralyze, snooze
je EnemyBadStatus
cmp [rbx+000000C0],0 //dance, laugh
je EnemyBadStatus
jmp originalcode
EnemyGoodStatus:
mov eax,1
mov [rbx+000000EC],eax
jmp originalcode
EnemyBadStatus:
inc [rbx+000000EC]
jmp originalcode
originalcode:
mov eax,[rbx+000000EC]
jmp return
StatusTurnsAOB:
jmp newmem
nop
return:
[DISABLE]
StatusTurnsAOB:
db 8B 83 EC 00 00 00
unregistersymbol(StatusTurnsAOB)
dealloc(newmem)
250
"Infinite Horse Stamina (Original MancombSeepgood, Updated By DrummerIX)"
Auto Assembler Script
[ENABLE]
aobscanmodule(HorseStaminaAOB,$process,F3 0F 5E C8 F3 0F 59 8B 48 1E 00 00 0F 2F CF) // should be unique
registersymbol(HorseStaminaAOB)
alloc(newmem,1024,HorseStaminaAOB)
label(return)
newmem:
divss xmm1,xmm0
mov [rbx+00001E48],461C3C00
mulss xmm1,[rbx+00001E48]
jmp return
HorseStaminaAOB:
jmp newmem
nop
nop
nop
nop
nop
nop
nop
return:
[DISABLE]
HorseStaminaAOB:
db F3 0F 5E C8 F3 0F 59 8B 48 1E 00 00
unregistersymbol(HorseStaminaAOB)
dealloc(newmem)
255
"Damage Modifier Script (FOR 2D MODE) (God Mode, etc.)"
Auto Assembler Script
[ENABLE]
aobscanmodule(DamageModAOB2,$process,44 0F B7 40 04 45 03 C1 0F B7 10) // should be unique
registersymbol(DamageModAOB2)
alloc(newmem,1024,DamageModAOB2)
label(return)
label(GodMode2D)
registersymbol(GodMode2D)
label(fHeroDamageMult2D)
registersymbol(fHeroDamageMult2D)
label(HeroCannotDie2D)
registersymbol(HeroCannotDie2D)
newmem:
movzx r8d,word ptr [rax+04]
HeroHit:
cmp r9d,0
jl HeroDamageHit
jmp CleanUp
HeroDamageHit:
cmp [fHeroDamageMult2D],(float)0.0
je CheckGodMode
push r9d
fild dword ptr [rsp]
fmul dword ptr [fHeroDamageMult2D]
fistp dword ptr [rsp]
pop r9d
CheckGodMode:
cmp [GodMode2D],1
jne CheckHeroCannotDie
xor r9d,r9d
jmp CleanUp
CheckHeroCannotDie:
cmp [HeroCannotDie2D],1
jne CleanUp
cmp r9d,r8d
jl @F
xor r9d,r9d
@@:
jmp CleanUp
CleanUp:
jmp return
GodMode2D:
dq 0
fHeroDamageMult2D:
dq (float)0.5
HeroCannotDie2D:
dq 1
DamageModAOB2:
jmp newmem
return:
[DISABLE]
DamageModAOB2:
db 44 0F B7 40 04
unregistersymbol(DamageModAOB2)
unregistersymbol(GodMode2D)
unregistersymbol(fHeroDamageMult2D)
dealloc(newmem)
256
"God Mode"
0:Off
1:On
4 Bytes
GodMode2D
257
"Hero Damage Multiplier (Set to 0.0 = Off; Otherwise multiplier so 0.5 is half damage to hero party)"
Float
fHeroDamageMult2D
258
"Hero Cannot Die (If On and God Mode Off, Then You Take Damage Until The Hit Will Kill You)"
0:Off
1:On
4 Bytes
HeroCannotDie2D
260
"MP Damage Modifier (FOR 2D MODE) (Infinite MP, HeroMPDamageMult)"
Auto Assembler Script
[ENABLE]
aobscanmodule(BattleMPModAOB2,$process,44 0F B7 40 06 45 03 C1 0F B7 50 02) // should be unique
registersymbol(BattleMPModAOB2)
alloc(newmem,1024,BattleMPModAOB2)
label(return)
label(InfiniteMP2)
registersymbol(InfiniteMP2)
label(fHeroMPDamageMult2)
registersymbol(fHeroMPDamageMult2)
newmem:
movzx r8d,word ptr [rax+06]
jmp HeroMPHit
HeroMPHit:
cmp r9d,0
jle return
CheckHeroMPDamageMult:
cmp [fHeroMPDamageMult2],(float)0.0
je CheckInfiniteMP
push r9d
fild dword ptr [rsp]
fmul dword ptr [fHeroMPDamageMult2]
fistp dword ptr [rsp]
pop r9d
CheckInfiniteMP:
cmp [InfiniteMP2],1
jne return
xor r9d,r9d
jmp return
EnemyMPHit:
jmp return
InfiniteMP2:
dq 0
fHeroMPDamageMult2:
dq (float)0.50
BattleMPModAOB2:
jmp newmem
return:
[DISABLE]
BattleMPModAOB2:
db 44 0F B7 40 06
unregistersymbol(BattleMPModAOB2)
unregistersymbol(InfiniteMP2)
unregistersymbol(fHeroMPDamageMult2)
dealloc(newmem)
261
"Infinite MP (2D Mode)"
0:Off
1:On
4 Bytes
InfiniteMP2
262
"Hero MP Damage Multiplier (2D Mode) (Set to 0.0 = Off; Otherwise multiplier so 0.5 is half MP damage to hero party)"
Float
fHeroMPDamageMult2
265
"Monster Defeated Multiplier"
Auto Assembler Script
[ENABLE]
aobscanmodule(MonsterDefeatedMultAOB,$process,8B 28 41 03 EE E8 ?? ?? ?? ?? 8B C6) // should be unique
registersymbol(MonsterDefeatedMultAOB)
alloc(newmem,1024,MonsterDefeatedMultAOB)
label(return)
label(MonsterDefeatedMult)
registersymbol(MonsterDefeatedMult)
newmem:
imul r14d,[MonsterDefeatedMult]
originalcode:
mov ebp,[rax]
add ebp,r14d
jmp return
MonsterDefeatedMult:
dq #10
MonsterDefeatedMultAOB:
jmp newmem
return:
[DISABLE]
MonsterDefeatedMultAOB:
db 8B 28 41 03 EE
unregistersymbol(MonsterDefeatedMultAOB)
unregistersymbol(MonsterDefeatedMult)
dealloc(newmem)
266
"Monster Defeated Multiplier"
2 Bytes
MonsterDefeatedMult
300
"Equipment Bonus Modifier Options (Block, Parry, Dodge, Critical, etc)"
1
305
"Bonus Block Percent"
Auto Assembler Script
[ENABLE]
aobscanmodule(StatModEquipmentAOB1,$process,F3 0F 11 46 34 F3 0F 10 45 EB ?? ?? ?? ?? ?? F3 0F 10 4D EF) // should be unique
registersymbol(StatModEquipmentAOB1)
alloc(newmem,1024,StatModEquipmentAOB1)
label(return)
label(BonusBlockPercent)
registersymbol(BonusBlockPercent)
newmem:
addss xmm0,[BonusBlockPercent]
originalcode:
movss [rsi+34],xmm0
jmp return
BonusBlockPercent:
dq (float)10.0
StatModEquipmentAOB1:
jmp newmem
return:
[DISABLE]
StatModEquipmentAOB1:
db F3 0F 11 46 34
unregistersymbol(StatModEquipmentAOB1)
unregistersymbol(BonusBlockPercent)
dealloc(newmem)
306
"Bonus Block Percent"
Float
BonusBlockPercent
310
"Bonus Parry Percent"
Auto Assembler Script
[ENABLE]
aobscanmodule(StatModEquipmentAOB2,$process,F3 0F 11 4E 38 F3 0F 10 4D EF F3 0F 58 46 3C) // should be unique
registersymbol(StatModEquipmentAOB2)
alloc(newmem,1024,StatModEquipmentAOB2)
label(return)
label(BonusParryPercent)
registersymbol(BonusParryPercent)
newmem:
addss xmm1,[BonusParryPercent]
originalcode:
movss [rsi+38],xmm1
jmp return
BonusParryPercent:
dq (float)10.0
StatModEquipmentAOB2:
jmp newmem
return:
[DISABLE]
StatModEquipmentAOB2:
db F3 0F 11 4E 38
unregistersymbol(StatModEquipmentAOB2)
unregistersymbol(BonusParryPercent)
dealloc(newmem)
311
"Bonus Parry Percent"
Float
BonusParryPercent
315
"Bonus Testing 3 (Unknown, Perhaps Hit Chance)"
Auto Assembler Script
[ENABLE]
aobscanmodule(StatModEquipmentAOB3,$process,F3 0F 11 46 2C F3 0F 10 45 E3 F3 0F 11 4E 30) // should be unique
registersymbol(StatModEquipmentAOB3)
alloc(newmem,1024,StatModEquipmentAOB3)
label(return)
newmem:
movss xmm0,[BigFloat]
originalcode:
movss [rsi+2C],xmm0
jmp return
BigFloat:
dq (float)100.0
StatModEquipmentAOB3:
jmp newmem
return:
[DISABLE]
StatModEquipmentAOB3:
db F3 0F 11 46 2C
unregistersymbol(StatModEquipmentAOB3)
dealloc(newmem)
320
"Bonus Testing 4 (Unknown)"
Auto Assembler Script
[ENABLE]
aobscanmodule(StatModEquipmentAOB4,$process,F3 0F 11 4E 30 F3 0F 10 4D E7 F3 0F 58 46 34) // should be unique
registersymbol(StatModEquipmentAOB4)
alloc(newmem,1024,StatModEquipmentAOB4)
label(return)
newmem:
movss xmm1,[BigFloat]
originalcode:
movss [rsi+30],xmm1
jmp return
BigFloat:
dq (float)100.0
StatModEquipmentAOB4:
jmp newmem
return:
[DISABLE]
StatModEquipmentAOB4:
db F3 0F 11 4E 30
unregistersymbol(StatModEquipmentAOB4)
dealloc(newmem)
325
"Bonus Dodge Percent"
Auto Assembler Script
[ENABLE]
aobscanmodule(StatModEquipmentAOB5,$process,F3 0F 11 46 3C F3 0F 10 45 F3 ?? ?? ?? ?? ?? F3 0F 10 4D F7) // should be unique
registersymbol(StatModEquipmentAOB5)
alloc(newmem,1024,StatModEquipmentAOB5)
label(return)
label(BonusDodgePercent)
registersymbol(BonusDodgePercent)
newmem:
addss xmm0,[BonusDodgePercent]
originalcode:
movss [rsi+3C],xmm0
jmp return
BonusDodgePercent:
dq (float)10.0
StatModEquipmentAOB5:
jmp newmem
return:
[DISABLE]
StatModEquipmentAOB5:
db F3 0F 11 46 3C
unregistersymbol(StatModEquipmentAOB5)
unregistersymbol(BonusDodgePercent)
dealloc(newmem)
326
"Bonus Dodge Percent"
Float
BonusDodgePercent
330
"Critical Percent Modifier"
Auto Assembler Script
[ENABLE]
aobscanmodule(StatModEquipmentAOB6,$process,F3 0F 11 4E 40 F3 0F 10 4D F7 F3 0F 58 46 44) // should be unique
registersymbol(StatModEquipmentAOB6)
alloc(newmem,1024,StatModEquipmentAOB6)
label(return)
label(BonusCriticalPercent)
registersymbol(BonusCriticalPercent)
newmem:
addss xmm1,[BonusCriticalPercent]
originalcode:
movss [rsi+40],xmm1
jmp return
BonusCriticalPercent:
dq (float)100.0
StatModEquipmentAOB6:
jmp newmem
return:
[DISABLE]
StatModEquipmentAOB6:
db F3 0F 11 4E 40
unregistersymbol(StatModEquipmentAOB6)
unregistersymbol(BonusCriticalPercent)
dealloc(newmem)
331
"Bonus Critical Percent"
Float
BonusCriticalPercent
335
"Testing 7 (Unknown)"
Auto Assembler Script
[ENABLE]
aobscanmodule(StatModEquipmentAOB7,$process,F3 0F 11 46 44 ?? ?? ?? ?? ?? 45 84 E4) // should be unique
registersymbol(StatModEquipmentAOB7)
alloc(newmem,1024,StatModEquipmentAOB7)
label(return)
newmem:
movss xmm0,[BigFloat]
originalcode:
movss [rsi+44],xmm0
jmp return
BigFloat:
dq (float)1000.0
StatModEquipmentAOB7:
jmp newmem
return:
[DISABLE]
StatModEquipmentAOB7:
db F3 0F 11 46 44
unregistersymbol(StatModEquipmentAOB7)
dealloc(newmem)
340
"Testing 8 (Unknown)"
Auto Assembler Script
[ENABLE]
aobscanmodule(StatModEquipmentAOB8,$process,F3 0F 11 4E 48 45 84 E4 0F 84 D8 01 00 00) // should be unique
registersymbol(StatModEquipmentAOB8)
alloc(newmem,1024,StatModEquipmentAOB8)
label(return)
newmem:
movss xmm1,[BigFloat]
originalcode:
movss [rsi+48],xmm1
jmp return
BigFloat:
dq (float)100.0
StatModEquipmentAOB8:
jmp newmem
return:
[DISABLE]
StatModEquipmentAOB8:
db F3 0F 11 4E 48
unregistersymbol(StatModEquipmentAOB8)
dealloc(newmem)
270
"Perfect Item Bashing (Forge Equipment)"
Auto Assembler Script
[ENABLE]
aobscanmodule(PerfectForgeBashAOB,$process,F3 0F 11 84 CB 58 02 00 00 8B 84 83 D4 03 00 00) // should be unique
registersymbol(PerfectForgeBashAOB)
alloc(newmem,1024,PerfectForgeBashAOB)
label(return)
newmem:
movss xmm0,[rbx+rcx*8+00000254]
originalcode:
movss [rbx+rcx*8+00000258],xmm0
jmp return
PerfectForgeBashAOB:
jmp newmem
nop
nop
nop
nop
return:
[DISABLE]
PerfectForgeBashAOB:
db F3 0F 11 84 CB 58 02 00 00
unregistersymbol(PerfectForgeBashAOB)
dealloc(newmem)
270
"Forge Temp Never Decrease"
Auto Assembler Script
[ENABLE]
aobscanmodule(ForgeTempAOB,$process,29 86 B0 03 00 00 48 81 C4 80 00 00 00) // should be unique
registersymbol(ForgeTempAOB)
alloc(newmem,1024,ForgeTempAOB)
label(return)
newmem:
xor eax,eax
originalcode:
sub [rsi+000003B0],eax
jmp return
ForgeTempAOB:
jmp newmem
nop
return:
[DISABLE]
ForgeTempAOB:
db 29 86 B0 03 00 00
unregistersymbol(ForgeTempAOB)
dealloc(newmem)
280
"Always Drop Options (Only Turn One Of These On)"
1
281
"Always Drop Rare Item"
Auto Assembler Script
[ENABLE]
aobscanmodule(AlwaysDropAOB1,$process,44 8B B5 88 00 00 00 84 C0 75 0E) // should be unique
registersymbol(AlwaysDropAOB1)
AlwaysDropAOB1+9:
db EB
[DISABLE]
AlwaysDropAOB1+9:
db 75
unregistersymbol(AlwaysDropAOB1)
282
"Always Drop Common Item If Rare Didn't Drop"
Auto Assembler Script
[ENABLE]
aobscanmodule(AlwaysDropAOB2,$process,84 C0 75 14 41 38 85 19 04 00 00 75 0B) // should be unique
registersymbol(AlwaysDropAOB2)
AlwaysDropAOB2+2:
db EB
[DISABLE]
AlwaysDropAOB2+2:
db 75
unregistersymbol(AlwaysDropAOB2)
285
"Instant Party Pep Up"
Auto Assembler Script
[ENABLE]
///aobscanmodule(PepUpAOB,$process,F3 0F 11 47 38 48 8B 5C 24 40) // should be unique
aobscanmodule(PepUpAOB,$process,F3 0F 10 47 38 F3 0F 10 15 ?? ?? ?? ?? F3 0F 5E C1) // should be unique
registersymbol(PepUpAOB)
alloc(newmem,1024,PepUpAOB)
label(return)
newmem:
comiss xmm1,[XMM1ToLookFor]
ja originalcode
movss xmm0,[MaxPepUp]
movss [rdi+38],xmm0
originalcode:
movss xmm0,[rdi+38]
jmp return
XMM1ToLookFor:
dq (float)100.0
MaxPepUp:
dq (float)1000.0
PepUpAOB:
jmp newmem
return:
[DISABLE]
PepUpAOB:
db F3 0F 10 47 38
unregistersymbol(PepUpAOB)
dealloc(newmem)
290
"Force Off Some Draconian Quests With Them Officially Still On (No Armor, No Shopping, Reduced EXP)"
Auto Assembler Script
[ENABLE]
TurnOffNoShopping:
dq 1
TurnOffNoArmor:
dq 1
TurnOffReducedEXP:
dq 1
[DISABLE]
TurnOffNoShopping:
dq 0
TurnOffNoArmor:
dq 0
TurnOffReducedEXP:
dq 0
291
"Don't Have This Option On When Finishing The Game"
4 Bytes
TurnOffNoShopping
292
"Turn Off No Shopping"
0:No
1:Yes
4 Bytes
TurnOffNoShopping
293
"Turn Off No Armor"
0:No
1:Yes
4 Bytes
TurnOffNoArmor
288
"Turn Off Reduced EXP"
0:No
1:Yes
4 Bytes
TurnOffReducedEXP
4000
"Pointers"
1
4100
"Gold"
4 Bytes
GoldBasePtr
C0
4101
"Mini Medals (View Attributes Everything)"
4 Bytes
MiniMedalsBasePtr
18
4102
"Perfectionist's Pearls (View Attributes Everything)"
4 Bytes
PearlsBasePtr
18
4200
"Highlighted Item ID"
8 Bytes
1
HighlightedItemBasePtr
10
4200
"Highlighted Item Qty"
4 Bytes
HighlightedItemBasePtr
18
4500
"Character Editor (View In Attributes Menu)"
1
4501
"Experience"
4 Bytes
CharBasePtr
B0
4502
"Current HP"
4 Bytes
CharBasePtr
7C
4503
"Current MP"
4 Bytes
CharBasePtr
80
4504
"Total Skill Points Earned"
4 Bytes
CharBasePtr
B4
4505
"Total Skill Points Spent"
4 Bytes
CharBasePtr
B8
4510
"Character Base Stats"
1
4511
"Max HP"
4 Bytes
CharBasePtr
A0
4512
"Max MP"
4 Bytes
CharBasePtr
A4
4513
"Strength"
4 Bytes
CharBasePtr
84
4514
"Resilience"
4 Bytes
CharBasePtr
88
4515
"Agility"
4 Bytes
CharBasePtr
8C
4516
"Deftness"
4 Bytes
CharBasePtr
90
4517
"Charm"
4 Bytes
CharBasePtr
94
4518
"Magical Might"
4 Bytes
CharBasePtr
98
4519
"Magical Mending"
4 Bytes
CharBasePtr
9C
4520
"Character Other Stats (From Seeds)"
1
4521
"Max HP"
4 Bytes
CharBasePtr
1BC
4522
"Max MP"
4 Bytes
CharBasePtr
1C0
4523
"Strength"
4 Bytes
CharBasePtr
1A0
4524
"Resilience"
4 Bytes
CharBasePtr
1A4
4525
"Agility"
4 Bytes
CharBasePtr
1A8
4526
"Deftness"
4 Bytes
CharBasePtr
1AC
4527
"Charm"
4 Bytes
CharBasePtr
1B0
4528
"Magical Might"
4 Bytes
CharBasePtr
1B4
4529
"Magical Mending"
4 Bytes
CharBasePtr
1B8
4110
"Draconian Quest (Attempt To Equip A Piece Of Armor To Update Pointer)"
1
4111
"Draconion Quest No Shopping"
0:Off
1:On
Byte
DraconianQuestBasePtr
49
4112
"Draconion Quest No Armour"
0:Off
1:On
Byte
DraconianQuestBasePtr
4A
4113
"Draconion Quest Super Shypox"
0:Off
1:On
Byte
DraconianQuestBasePtr
4B
4114
"Draconion Quest ShyPox"
0:Off
1:On
Byte
DraconianQuestBasePtr
4C
4115
"Draconion Quest Party Wiped Out If Protaganist Perishes"
0:Off
1:On
Byte
DraconianQuestBasePtr
4D
4116
"Draconion Quest All Enemies Are Super Strong"
0:Off
1:On
Byte
DraconianQuestBasePtr
4E
4114
"Draconion Quest Reduced Experience From Easy Fights"
0:Off
1:On
Byte
DraconianQuestBasePtr
4F
function lua_aobscan(name,module,bytes,index)
index = index - 1
if(module == "") then
local resultSet = AOBScan(bytes)
if(resultSet == nil) then
unregisterSymbol(name)
print(name.." not found")
else
unregisterSymbol(name)
registerSymbol(name,resultSet[index])
resultSet.destroy()
end
else
if(getModuleSize(module) == nil) then
print("Module "..module.." not found")
else
local memScanner = createMemScan()
local memFoundList = createFoundList(memScanner)
memScanner.firstScan(
soExactValue,vtByteArray,rtRounded,bytes,nil,
getAddress(module),(getAddress(module)+getModuleSize(module)),"",
fsmNotAligned,"",true,false,false,false)
memScanner.waitTillDone()
memFoundList.initialize()
if(memFoundList.Count == 0) then
unregisterSymbol(name)
print(name.." in module "..module.." not found")
else
unregisterSymbol(name)
registerSymbol(name,memFoundList.Address[index])
end
memScanner.destroy()
memFoundList.destroy()
end
end
end