- Cheats -
- Player Scripts
- No Damage/Ghost
- Unlimited Arrows - Enchantment Points Editor
- Enchantment Points - Unlimited Emeralds
- Enemy
- One Hit Kills
NOTES:
No Damage/Ghost will make you not register any damage.
Enable enchantment points editor then input any value for the points you want. Go to the inventory (if you are already in inventory close it then open it) and you should see it take effect. When you buy something, they might decrease, however simply edit them back.
For unlimited emeralds, you need to gain some to see it take effect.
Game Information:
This cheat table was made for Minecraft Dungeons Windows Store Gamepass version but it will work for normal Windows Store version (buy option) as well.
For the Mojang/minecraftnet version, i believe most cheats except no damage will work fine. Hook me up with Mojang version and i can fix damage cheat for it.
Edit1: Cheats should now work for Mojang version. Thanks 42187
Updates:
Replaced FearTheSouls table with mine. Feel free to improve/add upon it.
Added 13227 One Hit kills cheat.
Added support for Mojang minecraft net version.
Cheats Information:
I was asked how i was able to make the Enchantment Points and No Damage. Well, i can't make those lengthy explanations like Sunbeam hehe but i will try to explain it in a nice easy way.
Enchantment points is easier. First off, i wanted to find an instruction that accesses enchantment points all the time instead of when upgrading. So i put an access breakpoint on the enchantment address (F5) and went to game to bring up the Inventory. I found this instruction
Code: Select all
"Dungeons.exe"+848F00: 8B 81 E0 01 00 00 - mov eax,[rcx+000001E0]
"Dungeons.exe"+848F06: 2B 81 E4 01 00 00 - sub eax,[rcx+000001E4] >> Breakpoint hit here
"Dungeons.exe"+848F0C: C3 - ret
Did what you would usually, just write a value or nop the sub and profit!. But wait, i noticed that my points go negative if i buy something or input a big value like 999. That told me there was some other calculation going on. If you notice the instruction, sub eax,[rcx+000001E4] - eax for me at the time was 1 and [rcx+000001E4] was the value i entered (999). So 999 is subtracted from 1, i understood why it went negative.
I looked at the instruction mov eax,[rcx+000001E0]. Interesting. What is [rcx+000001E0]?. Why is it 1?. After a little fiddling with 1E0 and 1E4, i understood that [rcx+000001E4] is points spent. [rcx+000001E0] is current points. And i was making points spent 999 while my current points were 1. That's why it went negative haha.
So i did an injection and it worked but if you upgrade, they go negative or something. Turns out there's too many instances where these points are modified. Meanwhile, @Impala told me how someone had a points editor. I put a write breakpoint and found these when upgrading.
The goal was to make it so your point stay the same when you upgrade. So many places when it's checked. I had an idea. What if i can make a ignore upgrade requirements cheat?. So i put an access breakpoint this time and went to the upgrade menu. An instruction hit same sub eax, [rbx+1e4]. There was a cmpare near and jnl. It was obvious. The instruction was comparing if you had enough points and then doing something. I forced that jnl and voila
Dungeons.exe+86103C - EB 08 - jmp Dungeons.exe+861046
This is where it shows the too expensive check. I changed it to jmp. It allowed me to go to the next screen. So this was the expensive check. I still had the breakpoint active, saw in instruction list and new one had popped up. Same deal with sub eax, [ebx+1e4] instruction and a compare near.
Code: Select all
Dungeons.exe+84D891 - 3B D0 - cmp edx,eax
Dungeons.exe+84D893 - 7C 56 - jl Dungeons.exe+84D8EB
So jl = jump if edx value is less than eax. We can't have that, can we?. I nopped the jump and i could upgrade. There, an ignore requirement script. It still allowed the value to go negative though.
The solution was to write 0 to point spent and force/nop these jmps and it would let you upgrade without value going negative and your current points also staying untouched. I wasn't interested in doing so many injections and i felt like a points editor would be better. So, all i am doing in my script is writing 0 to points spent and allowing the user to input whatever value for current points. So 0 is subtracted everytime you buy something.
No damage:
This one took a lot of time but i wanted to do it since if i pulled it off, it would be really nice. So same deal as others, found health, put access breakpoint, bunch of instructions pop-up. I notice many of them access both player and enemy. One of them only accesses player.
Code: Select all
Dungeons.exe+6E46DE - F3 0F10 47 34 - movss xmm0,[rdi+34]
Good enough. Could write max value or 999 and you will have infinite health. However, i noticed that this was a damage function. You get hit and player health decreases. Wonder if i can do something more? I have had a lot of fun messing with functions like these with really strange or cool effect at times like stupid enemies (they don't react or act stupid), stuff like that. My immediate reaction is to ret null on function. 50/50 chance it crashes or i get no damage. Scrolled up and saw this conditional jump which goes to end of function.
Code: Select all
Dungeons.exe+6E452F - 0F84 35020000 - je Dungeons.exe+6E476A
Forced it and i don't get any damage neither react. Cool!. But enemies also get no damage. Not good. So that got me thinking, this function affects both player and enemy but there's a point near which it only affects player. What is that compare?
Code: Select all
Dungeons.exe+6E46D4 - 4C 39 04 C8 - cmp [rax+rcx*8],r8 // this compare checks if player or enemy
Dungeons.exe+6E46D8 - 0F85 87000000 - jne Dungeons.exe+6E4765
Dungeons.exe+6E46DE - F3 0F10 47 34 - movss xmm0,[rdi+34] // beyond this point, it's just player
My first method for dealing with this sort of challenge is notice all the registers where it's just the player. Go to the top where i want to return function and notice any similarities between registers. Then work from there. So it was a lot of debugging, going through instructions, noting instructions and registers. I found something interesting. Near where there is a check done between player and enemy, is this call
Dungeons.exe+6E46B3 - E8 38C44400 - call Dungeons.exe+B30AF0
Go to that function and you see
Code: Select all
Dungeons.exe+B30B2B - 49 89 43 E0 - mov [r11-20],rax
Dungeons.exe+B30B2F - 48 8D 15 8C1C3402 - lea rdx,[Dungeons.exe+2E727C2] { ("PlayerCharacter") }
Dungeons.exe+B30B36 - 48 8D 05 2359DB00 - lea rax,[Dungeons.exe+18E6460] { (610044232) }
Dungeons.exe+B30B3D - 49 89 43 D8 - mov [r11-28],rax
Dungeons.exe+B30B41 - 48 8D 0D 18BE2D02 - lea rcx,[Dungeons.exe+2E0C960] { ("/Script/Dungeons") }
Dungeons.exe+B30B48 - 48 8D 05 318C7AFF - lea rax,[Dungeons.exe+2D9780] { (-859586509) }
Dungeons.exe+B30B4F - 49 89 43 D0 - mov [r11-30],rax
Ah, my immediate worry is it player character as in enemy/player or just player. Nice enough, it's just player. So it was starting to make sense now.
Code: Select all
Dungeons.exe+6E46B3 - E8 38C44400 - call Dungeons.exe+B30AF0
Dungeons.exe+6E46B8 - 48 8B 53 10 - mov rdx,[rbx+10]
Dungeons.exe+6E46BC - 4C 8D 40 30 - lea r8,[rax+30]
Dungeons.exe+6E46C0 - 49 63 40 08 - movsxd rax,dword ptr [r8+08]
Dungeons.exe+6E46C4 - 3B 42 38 - cmp eax,[rdx+38]
Dungeons.exe+6E46C7 - 0F8F 98000000 - jg Dungeons.exe+6E4765
Dungeons.exe+6E46CD - 48 8B C8 - mov rcx,rax
Dungeons.exe+6E46D0 - 48 8B 42 30 - mov rax,[rdx+30]
Dungeons.exe+6E46D4 - 4C 39 04 C8 - cmp [rax+rcx*8],r8
Dungeons.exe+6E46D8 - 0F85 87000000 - jne Dungeons.exe+6E4765
Dungeons.exe+6E46DE - F3 0F10 47 34 - movss xmm0,[rdi+34]
After the call to grab player structure, it sets values/addresses up for the eventual compare if it's enemy or player that's going to receive damage/get value modified. It was still not something i could use since the registers at the top of function weren't similar to what they were here and i wasn't sure how many parameters this function took and what those parameters were. So i did the debugging of the start of the function. Went through calls and i noticed the same pattern. That function Dungeons.exe+B30AF0 and the way those registers/values were setup were used inside the first call. I thought good but unfortunately, the values were wiped out as you got out of the call and the function was called by different places so i couldn't use it to inject.
So i decided to see what values the function needed to be called with. So i debugged the function at top and where my health address hit and there was a pointer inside my health structure at +20 that was setup in rbx before the getplayer function is called. Luckily enough, my health structure value was in a register at the top of function.
All i needed to do at this point was to setup the variables for the getplayer function, setup the values it returns for an ultimate compare of player/enemy and return if player(no damage) or if so wished, max damage/one hit kill or do nothing if enemy. I decided to do nothing to enemy, was getting late and i wanted this done asap (2-3 hours of debugging at this point and i was doing this just to help out fearthesouls not have to delete the thread lol, clearly too much time than i wanted to spend)
In my script, i save the registers value (for enemy player since we would run the function as normal for them). grab the pointer for getplayer function, call the function (unfortunately, i couldn't AOB it as it had too many hard-coded values so called it directly) then setup the values for compare player/enemy. If player, i ret otherwise execute normally.
I am sure i could have used the values in registers instead of calling the getplayer function once i spent more time on it understanding what every value/register was used but i got what i wanted and was happy with it. The getplayer function is easily found, it's near the player only damage instruction which can be AOBed so not big of an issue if the game updates.
Screenshot:
What you will need?
- Cheat engine latest version 7.1
- CT file (attached)
PS: Please don't paste this CT elsewhere without linking to this thread. Took me a lot of effort to make this, the least you could do is support me?
How to use this cheat table?
- Install Cheat Engine
- Double-click the .CT file in order to open it.
- Click the PC icon in Cheat Engine in order to select the game process.
- Keep the list.
- Activate the trainer options by checking boxes or setting values from 0 to 1