Daemon X Machina Customization Table

Upload your cheat tables here (No requests)
User avatar
snowshadow
Noobzor
Noobzor
Posts: 7
Joined: Thu Jul 06, 2017 9:29 am
Reputation: 0

Re: Daemon X Machina Customization Table v1.4

Post by snowshadow »

tabman wrote:
Fri Mar 06, 2020 10:13 pm
...
This is really useful! Btw is there a way to check current item id and change it? That way we can change weapons and armor with other weapons and armor if we happen to have their id.

How to use this cheat table?
  1. Install Cheat Engine
  2. Double-click the .CT file in order to open it.
  3. Click the PC icon in Cheat Engine in order to select the game process.
  4. Keep the list.
  5. Activate the trainer options by checking boxes or setting values from 0 to 1

tabman
Novice Cheater
Novice Cheater
Posts: 21
Joined: Sun Jun 10, 2018 2:15 pm
Reputation: 20

Re: Daemon X Machina Customization Table v1.4

Post by tabman »

snowshadow wrote:
Sat Mar 07, 2020 8:34 pm
This is really useful! Btw is there a way to check current item id and change it? That way we can change weapons and armor with other weapons and armor if we happen to have their id.
Selected Equipment Info script creates a variable called "bp_select" and writes a pointer to currently selected item into it. You can see that [bp_select]+20, [bp_select]+28 and [bp_select]+30 point to item slots 1-3. You can manually add an address with [bp_select]+14 and it will point to item obtained order. If you manage to find out at which offset item id is located then just add address with [bp_select]+id_offset. Item structure size is hex:38 bytes, which is 56 in decimal. From this you can figure out that item slot pointers are situated at the very end of structure.

Update: I was just playing game as normal and noticed that some attachments ids are different from those listed in my table, even though i manually compiled that list and checked that ids were correct. Seems like either attachments ids are somehow inconsistent, or they are actually some kind of pointers to global array of attachments. In any way i decided to update my original responce to warn you that same thing might happen with items. In case of attachments it is easily revertable by clearing slots and then putting new ones. But in case of items you can easily corrupt an item by changing it's id to the one you think is right, but is actually non-existent for that game session.

User avatar
The Black X
Table Makers
Table Makers
Posts: 353
Joined: Sun Feb 16, 2020 1:26 pm
Reputation: 52

Re: Daemon X Machina Customization Table v1.4

Post by The Black X »

tabman wrote:
Sat Mar 07, 2020 9:51 pm
snowshadow wrote:
Sat Mar 07, 2020 8:34 pm
This is really useful! Btw is there a way to check current item id and change it? That way we can change weapons and armor with other weapons and armor if we happen to have their id.
Selected Equipment Info script creates a variable called "bp_select" and writes a pointer to currently selected item into it. You can see that [bp_select]+20, [bp_select]+28 and [bp_select]+30 point to item slots 1-3. You can manually add an address with [bp_select]+14 and it will point to item obtained order. If you manage to find out at which offset item id is located then just add address with [bp_select]+id_offset. Item structure size is hex:38 bytes, which is 56 in decimal. From this you can figure out that item slot pointers are situated at the very end of structure.

Update: I was just playing game as normal and noticed that some attachments ids are different from those listed in my table, even though i manually compiled that list and checked that ids were correct. Seems like either attachments ids are somehow inconsistent, or they are actually some kind of pointers to global array of attachments. In any way i decided to update my original responce to warn you that same thing might happen with items. In case of attachments it is easily revertable by clearing slots and then putting new ones. But in case of items you can easily corrupt an item by changing it's id to the one you think is right, but is actually non-existent for that game session.
Sadly ids are inconsistent, either for weapon/armors and attachments, and they seem to vary by a certain amount everytime you load. You can check their current value with my table under attachments section.
ID is located -18(hex) from 1st slot and is 8 bytes long.
Image

tabman
Novice Cheater
Novice Cheater
Posts: 21
Joined: Sun Jun 10, 2018 2:15 pm
Reputation: 20

Re: Daemon X Machina Customization Table v1.4

Post by tabman »

Here is an updated table:

-Added "Selected Attachment Info" script. You can examine data of currently viewable attachment.
-Added "Compile Attachments List" script. Automatically creates and updates Dropdown List for attachment names every time you Load a Savegame.

PS: Now if only there was an address where I could get consistent item IDs like with attachments. That way I could modify script to automatically update dropdown list with item names as well. I will try to look into it a bit more myself, but it would be much appreciated if anyone got any useful tips.

@The Black X, you might want either to integrate these scripts into your table (for which i give my permission, if you need it) or edit your original post to include a link to posted table, since as this topic would probably grow, newcomers wouldn't be able to easily find it.
Attachments
DXM 1.0.0 table v2 {tabman}.CT
(84.39 KiB) Downloaded 300 times

User avatar
The Black X
Table Makers
Table Makers
Posts: 353
Joined: Sun Feb 16, 2020 1:26 pm
Reputation: 52

Re: Daemon X Machina Customization Table v1.4

Post by The Black X »

Glad i can merge your table with mine. About the address there are few that seem list-like of ids, but still unsure. Just searching for the id of a relatively low armor/weapon array of byte seem to find some intresting ones.

User avatar
budboy
Expert Cheater
Expert Cheater
Posts: 56
Joined: Wed Apr 19, 2017 3:11 pm
Reputation: 6

Re: Daemon X Machina Customization Table v1.4

Post by budboy »

tabman wrote:
Fri Mar 06, 2020 10:13 pm
I'm not sure if game version 1.0.0 is still actual, as i don't have access to newer one. So, here are some guidelines, just in case my table does not work in other versions.

Can Always Buy Skills
When the skill is not buyable it is byte:2, otherwise its byte:0. Thus you can easily find needed address(es) and either do a script or pointer version.

All Equipment Slots (Populate Values / Unlock)
Difference with the table by Mezspirit is that i use a different address to inject. The script successfully accesses items both in hangar and factory menu. I didn't check his table, so maybe his version wokrs in hangar too.

Selected Equipment Info
There seems to be two different versions of item array in game. Main array is the one you already have a pointer to:
[[["DXM-Win64-Shipping.exe"+0432A120]+1F0]+9B0]. This is where you edit values. But when you are viewing items, game creates a "shadow" sorted list. It has same per-item info as main array,however values edited here will give you nothing. On the other hand when you change selection, the cursor position changes accordingly, ie. first item in "shadow" list has index 0, second - 1, etc. I cocated cursor address and found out what instructions accessed it. All instructions accessed an address with +150 offset. By checking the corresponding routines I found out that cursor position was in some way (didnt figure out exact algorithm) trasnlated into obtained order: [item_base_pointer+14]. And then in another routine this value was compared against [item_base_pointer+14] in main array to find the corresponding item. Hope this info helps you.
tabman wrote:
Sat Mar 07, 2020 9:51 pm
snowshadow wrote:
Sat Mar 07, 2020 8:34 pm
This is really useful! Btw is there a way to check current item id and change it? That way we can change weapons and armor with other weapons and armor if we happen to have their id.
Selected Equipment Info script creates a variable called "bp_select" and writes a pointer to currently selected item into it. You can see that [bp_select]+20, [bp_select]+28 and [bp_select]+30 point to item slots 1-3. You can manually add an address with [bp_select]+14 and it will point to item obtained order. If you manage to find out at which offset item id is located then just add address with [bp_select]+id_offset. Item structure size is hex:38 bytes, which is 56 in decimal. From this you can figure out that item slot pointers are situated at the very end of structure.

Update: I was just playing game as normal and noticed that some attachments ids are different from those listed in my table, even though i manually compiled that list and checked that ids were correct. Seems like either attachments ids are somehow inconsistent, or they are actually some kind of pointers to global array of attachments. In any way i decided to update my original responce to warn you that same thing might happen with items. In case of attachments it is easily revertable by clearing slots and then putting new ones. But in case of items you can easily corrupt an item by changing it's id to the one you think is right, but is actually non-existent for that game session.
Tested the tables, worked like a charm

but yes, the IDs are annoying in that sometimes they are not consistent, I'm still trying to find the address for the weapons so I can swap some out/off

Also, any chance it is possible to edit the stats of the equipment or equipped armor/weapon directly?

tabman
Novice Cheater
Novice Cheater
Posts: 21
Joined: Sun Jun 10, 2018 2:15 pm
Reputation: 20

Re: Daemon X Machina Customization Table v1.4

Post by tabman »

budboy wrote:
Thu Mar 12, 2020 9:52 am
...
Also, any chance it is possible to edit the stats of the equipment or equipped armor/weapon directly?
Most likely, yes. My guess would be to edit gamefiles, since thats where game takes item data from. However I don't have any knowledge about Unreal Engine and how it stores and operates data.

Sidenote: As I finally finished farming all allies, a new round of hell was awaiting me. I suddenly realized that I wanted 4 copies of each weapon and farming or editing manually my invertory was not an option. Hence I wrote a script that basically turns the "leftover" items into the missing ones.
Use it with caution since it may potentially screw your invertory(even though brief testing went well). So make a backup of your savefile beforehand.
Spoiler

Code: Select all

{$Lua}
--This script relies on equipment item type(ie. head, body, auxiliary etc.)
--to determine how many copies to allow for each type. However newly obtained items
--regardless of method(ie. picked on battlefield, bought in shop) might have
--"corrupted" item type value. Therefore, before using this script, it is recommended to save and reload
--if you obtained any new items since last savegame load.

function tlength(T)
  local count = 0
  for _ in pairs(T) do count = count + 1 end
  return count
end

function readItem(address)
  local item = {}
  item.Address = address
  item.Pointer = readQword(address)
  item.ID = readQword(address+0x8)
  item.Type = readInteger(address+0x10)
  item.Order = readInteger(address+0x14)
  item.IsNew = readBytes(address+0x18,1)
  item.Unknown = readBytes(address+0x19,7,true)
  item.Slot1 = readQword(address+0x20)
  item.Slot2 = readQword(address+0x28)
  item.Slot3 = readQword(address+0x30)
  item.amount = 1
  return item
end

function writeItem(item)
  writeQword(item.Address,item.Pointer)
  writeQword(item.Address+0x8,item.ID)
  writeInteger(item.Address+0x10,item.Type)
  writeInteger(item.Address+0x14,item.Order)
  writeBytes(item.Address+0x18,item.IsNew)
  writeBytes(item.Address+0x19,item.Unknown)
  writeQword(item.Address+0x20,item.Slot1)
  writeQword(item.Address+0x28,item.Slot2)
  writeQword(item.Address+0x30,item.Slot3)
end

function dublicate()
  --[[
  [[["DXM-Win64-Shipping.exe"+0432A120]+1F0]+9B0]
  ]]--

  local bp_array = readQword(getAddress("DXM-Win64-Shipping.exe")+0x432A120)
  bp_array = readQword(bp_array+0x1F0)
  local size = readInteger(bp_array+0x9b8)-1
  bp_array = readQword(bp_array+0x9b0)

  local originals = {}
  local dublicates = {}
  local first_dublicate = nil

  --[[
  Allowed amount of dublicates per item category:
  0:Head
  1:Body
  2:Left Arm
  3:Right Arm
  4:Legs
  5:Processor
  6:Ranged
  7:Melee
  8:Shoulder
  9:Auxilliary

  In this example Ranged and Melee weapons are allowed to have 4 dublicates
  while all others allowed to have only 1. You can edit it as you like.
  --]]
  local amount = {[0]=1,[1]=1,[2]=1,[3]=1,[4]=1,[5]=1,[6]=4,[7]=4,[8]=1,[9]=1}

  --Searching for items that may need to be dublicated - "originals" table
  --and items that will serve as dublication material - "dublicates" table
  for i=0,size do
    local bp_item = bp_array+i*0x38
    local item = readItem(bp_item) --read item data and present it as structure

    --Check if item is already in "originals" table
    if originals[item.ID] == nil then
      originals[item.ID] = item
    else
      originals[item.ID].amount = originals[item.ID].amount + 1
      --Check if we have enough dublicates of item
      if originals[item.ID].amount > amount[item.Type] then
        --Candidate for dublication material is detected

        --Make any nessesary changes before putting it into list

        item.IsNew = 0 --Dublication material candidate will be marked as newly obtained item

        --Make it so that all dublication candidates will become the same item
        --as the first candidate. Item may change every time the script is executed.
        if #dublicates == 0 then first_dublicate = item
        else
          --item.Order is item obtained order, it is best to leave it as is
          --unless you know what you are doing
          item.Pointer = first_dublicate.Pointer
          item.ID = first_dublicate.ID
          item.Type = first_dublicate.Type
          item.Unknown = first_dublicate.Unknown
          item.Slot1 = first_dublicate.Slot1
          item.Slot2 = first_dublicate.Slot2
          item.Slot3 = first_dublicate.Slot3
        end

        --After changes are made, put candidate into list
        table.insert(dublicates,item)
      end
    end
  end

  --Dublication/Filtration process
  for ID,o in pairs(originals) do
    ::loop::
    --If item got the required number of dublicates
    if o.amount >= amount[o.Type] then
      originals[ID] = nil --erase table entry
      goto continue --move to next item in "originals" table
    end
    --If dublication material table is empty then move on
    if #dublicates == 0 then goto continue end

    d = table.remove(dublicates) --remove last element from table and get its pointer

    --Rewrite dublication material data. d.Order is left intact
    d.Pointer = o.Pointer
    d.ID = o.ID
    d.Type = o.Type
    d.IsNew = o.IsNew
    d.Unknown = o.Unknown
    d.Slot1 = o.Slot1
    d.Slot2 = o.Slot2
    d.Slot3 = o.Slot3

    writeItem(d) --rewrite invertory data
    d = nil
    o.amount = o.amount + 1
    goto loop
    ::continue::
  end

  --Prepare and print resulting information

  total = 0
  for k,v in pairs(originals) do
    total = total + (amount[v.Type]-v.amount)
  end

  format = [[Invertory size: %d
Unique ID's to dublicate: %d
Items amount to dublicate: %d
Leftover items amount: %d
-------------------------------------]]

  print(string.format(format,size+1,tlength(originals),total,#dublicates))
end

[ENABLE]
dublicate() --call dublication function upon script activation

[DISABLE]
Attachments
DXM 1.0.0 Dublicate Items.CT
(5.71 KiB) Downloaded 172 times

demorest2
Expert Cheater
Expert Cheater
Posts: 331
Joined: Wed Mar 04, 2020 1:14 pm
Reputation: 41

Re: Daemon X Machina Customization Table v1.5

Post by demorest2 »

Any fast crafting option!?

SilverRain
What is cheating?
What is cheating?
Posts: 1
Joined: Tue Mar 24, 2020 10:33 pm
Reputation: 0

Re: Daemon X Machina Customization Table v1.5

Post by SilverRain »

Is there a means of preventing a defeated Strai from disappearing when you select a drop from it? Or maybe obtaining all of the drops a Strai has, rather than just one of them?

dxmthrowaway
What is cheating?
What is cheating?
Posts: 1
Joined: Sat Mar 28, 2020 8:55 pm
Reputation: 0

Re: Daemon X Machina Customization Table v1.4

Post by dxmthrowaway »

tabman wrote:
Fri Mar 06, 2020 10:13 pm
I'm not sure if game version 1.0.0 is still actual, as i don't have access to newer one. So, here are some guidelines, just in case my table does not work in other versions.

Can Always Buy Skills
When the skill is not buyable it is byte:2, otherwise its byte:0. Thus you can easily find needed address(es) and either do a script or pointer version
Seems like this is no longer the case, I assume there was an update recently and now the skills script is giving the error:

"<<Error in line 5(assert("DXM-win64-shipping.exe"+CEF9B2, 80 BA 01 00 00 00 )): The bytes at "DXM-win64-shipping.exe+CEF9B2 are not what was expected"

The same error happened for another user as well as myself, so at least it seems consistent. However, there doesn't really seem to be a way to get the script to function again. If an updated script isn't possible, do you have a tutorial for being able to manually locate the memory region for the lab upgrades themselves and which byte to change? I'm currently not able to find where I need to go to edit.

kamikaze00007
Novice Cheater
Novice Cheater
Posts: 20
Joined: Wed Dec 18, 2019 9:32 pm
Reputation: 3

Re: Daemon X Machina Customization Table v1.5

Post by kamikaze00007 »

I see people are still working on this game. Does anybody have a mini-trainer that gives unlimited durability for Blitz Shoulder Weapons? It's the only Shoulder Weapon that actually works based on part durability rather than ammunition.

ManyEagles
Noobzor
Noobzor
Posts: 7
Joined: Thu Apr 13, 2017 8:54 pm
Reputation: 4

Re: Daemon X Machina Customization Table v1.4

Post by ManyEagles »

tabman wrote:
Thu Mar 12, 2020 3:42 pm
budboy wrote:
Thu Mar 12, 2020 9:52 am
...
Also, any chance it is possible to edit the stats of the equipment or equipped armor/weapon directly?
Most likely, yes. My guess would be to edit gamefiles, since thats where game takes item data from. However I don't have any knowledge about Unreal Engine and how it stores and operates data.

Sidenote: As I finally finished farming all allies, a new round of hell was awaiting me. I suddenly realized that I wanted 4 copies of each weapon and farming or editing manually my invertory was not an option. Hence I wrote a script that basically turns the "leftover" items into the missing ones.
Use it with caution since it may potentially screw your invertory(even though brief testing went well). So make a backup of your savefile beforehand.
Spoiler

Code: Select all

{$Lua}
--This script relies on equipment item type(ie. head, body, auxiliary etc.)
--to determine how many copies to allow for each type. However newly obtained items
--regardless of method(ie. picked on battlefield, bought in shop) might have
--"corrupted" item type value. Therefore, before using this script, it is recommended to save and reload
--if you obtained any new items since last savegame load.

function tlength(T)
  local count = 0
  for _ in pairs(T) do count = count + 1 end
  return count
end

function readItem(address)
  local item = {}
  item.Address = address
  item.Pointer = readQword(address)
  item.ID = readQword(address+0x8)
  item.Type = readInteger(address+0x10)
  item.Order = readInteger(address+0x14)
  item.IsNew = readBytes(address+0x18,1)
  item.Unknown = readBytes(address+0x19,7,true)
  item.Slot1 = readQword(address+0x20)
  item.Slot2 = readQword(address+0x28)
  item.Slot3 = readQword(address+0x30)
  item.amount = 1
  return item
end

function writeItem(item)
  writeQword(item.Address,item.Pointer)
  writeQword(item.Address+0x8,item.ID)
  writeInteger(item.Address+0x10,item.Type)
  writeInteger(item.Address+0x14,item.Order)
  writeBytes(item.Address+0x18,item.IsNew)
  writeBytes(item.Address+0x19,item.Unknown)
  writeQword(item.Address+0x20,item.Slot1)
  writeQword(item.Address+0x28,item.Slot2)
  writeQword(item.Address+0x30,item.Slot3)
end

function dublicate()
  --[[
  [[["DXM-Win64-Shipping.exe"+0432A120]+1F0]+9B0]
  ]]--

  local bp_array = readQword(getAddress("DXM-Win64-Shipping.exe")+0x432A120)
  bp_array = readQword(bp_array+0x1F0)
  local size = readInteger(bp_array+0x9b8)-1
  bp_array = readQword(bp_array+0x9b0)

  local originals = {}
  local dublicates = {}
  local first_dublicate = nil

  --[[
  Allowed amount of dublicates per item category:
  0:Head
  1:Body
  2:Left Arm
  3:Right Arm
  4:Legs
  5:Processor
  6:Ranged
  7:Melee
  8:Shoulder
  9:Auxilliary

  In this example Ranged and Melee weapons are allowed to have 4 dublicates
  while all others allowed to have only 1. You can edit it as you like.
  --]]
  local amount = {[0]=1,[1]=1,[2]=1,[3]=1,[4]=1,[5]=1,[6]=4,[7]=4,[8]=1,[9]=1}

  --Searching for items that may need to be dublicated - "originals" table
  --and items that will serve as dublication material - "dublicates" table
  for i=0,size do
    local bp_item = bp_array+i*0x38
    local item = readItem(bp_item) --read item data and present it as structure

    --Check if item is already in "originals" table
    if originals[item.ID] == nil then
      originals[item.ID] = item
    else
      originals[item.ID].amount = originals[item.ID].amount + 1
      --Check if we have enough dublicates of item
      if originals[item.ID].amount > amount[item.Type] then
        --Candidate for dublication material is detected

        --Make any nessesary changes before putting it into list

        item.IsNew = 0 --Dublication material candidate will be marked as newly obtained item

        --Make it so that all dublication candidates will become the same item
        --as the first candidate. Item may change every time the script is executed.
        if #dublicates == 0 then first_dublicate = item
        else
          --item.Order is item obtained order, it is best to leave it as is
          --unless you know what you are doing
          item.Pointer = first_dublicate.Pointer
          item.ID = first_dublicate.ID
          item.Type = first_dublicate.Type
          item.Unknown = first_dublicate.Unknown
          item.Slot1 = first_dublicate.Slot1
          item.Slot2 = first_dublicate.Slot2
          item.Slot3 = first_dublicate.Slot3
        end

        --After changes are made, put candidate into list
        table.insert(dublicates,item)
      end
    end
  end

  --Dublication/Filtration process
  for ID,o in pairs(originals) do
    ::loop::
    --If item got the required number of dublicates
    if o.amount >= amount[o.Type] then
      originals[ID] = nil --erase table entry
      goto continue --move to next item in "originals" table
    end
    --If dublication material table is empty then move on
    if #dublicates == 0 then goto continue end

    d = table.remove(dublicates) --remove last element from table and get its pointer

    --Rewrite dublication material data. d.Order is left intact
    d.Pointer = o.Pointer
    d.ID = o.ID
    d.Type = o.Type
    d.IsNew = o.IsNew
    d.Unknown = o.Unknown
    d.Slot1 = o.Slot1
    d.Slot2 = o.Slot2
    d.Slot3 = o.Slot3

    writeItem(d) --rewrite invertory data
    d = nil
    o.amount = o.amount + 1
    goto loop
    ::continue::
  end

  --Prepare and print resulting information

  total = 0
  for k,v in pairs(originals) do
    total = total + (amount[v.Type]-v.amount)
  end

  format = [[Invertory size: %d
Unique ID's to dublicate: %d
Items amount to dublicate: %d
Leftover items amount: %d
-------------------------------------]]

  print(string.format(format,size+1,tlength(originals),total,#dublicates))
end

[ENABLE]
dublicate() --call dublication function upon script activation

[DISABLE]
How do you use this? In your inventory or after a mission?

blulaz
What is cheating?
What is cheating?
Posts: 4
Joined: Sat May 18, 2019 4:14 am
Reputation: 0

Re: Daemon X Machina Customization Table v1.5

Post by blulaz »

Hey cool table man. Adding eq slots, outer cosmetics etc all works fine, though i cant get the armor/weapon inventory replacer to work, seems like the ID's are inconsistent. Your "saved" IDs for eg: Orsa head (0000006600012592) are different than mine (000000660001258D). So, whenever i tried to use your ID's it will shows up as error object ingame.
Also is it possible to get the ID's for items you hovered? even with tabman's script, it will only "scan" the selected items in your hangar. What i wanted to do is to get the ID's for those exclusive boss equipments in the secret development shop so i can use it to replace my random armors/weapons

User avatar
The Black X
Table Makers
Table Makers
Posts: 353
Joined: Sun Feb 16, 2020 1:26 pm
Reputation: 52

Daemon X Machina Customization Table v1.5

Post by The Black X »

They are inconsistent indeed due to unknown reasons. It seems you ids are -5 lower (92-8D). Just subtract 5 from my ids and you should be fine.
Last edited by The Black X on Thu Jan 01, 1970 12:00 am, edited 1 time in total.

gremlinbc
Noobzor
Noobzor
Posts: 7
Joined: Fri May 17, 2019 10:53 pm
Reputation: 0

Re: Daemon X Machina Customization Table v1.5

Post by gremlinbc »

table v1.5 needs a update only half of it is working cant use the armor part I tried adding different head options never shows up in game

Post Reply