Dragon Quest XI S: Definitive Edition

Before getting into the guide, I want to make something very clear:

No, I will NOT be providing you one-on-one personalized help

I publish documentation because I want to provide resources to others who want to get into modding, but I DO NOT want to be contacted by those seeking individualized help. That's what this is meant for: to provide general guidance. Not a turnkey solution for your exact vision.

That's not to admonish those who try- I understand this isn't the easiest thing in the world, despite my intentions to make things easier than they were for me when I started. I am also very happy to troubleshoot or make corrections to the documentation (mistakes do happen sometimes and things can always be made a little clearer)

However, this has been a repeat issue to the point where helping others follow existing documentation and guides (oftentimes simply repeating the same things already in the guides themselves) has taken a disproportionately large amount of time compared to working on new mods or creating new documentation. 

Again, if you want to get involved, feel free to join our Discord. Feel free to ask questions there. However, do not necessarily expect me to address issues personally. There are a number of others who work on the same things, and many times you can find what you're looking for there by just searching the modding-related channels.

Okay -- let's get into it:
-----------------------------

First, you'll need to unpack the game's files if you have not already done so. You can follow the "Grabbing the Source Files" section of the guide here: https://sites.google.com/view/dqxi-commands/modding/creating-mods?authuser=0#h.a6d83xq9gvio

All item and weapon stats are stored inside this DataTable: DT_ItemTable, located inside of the (Jack)Game\Content\DataTables\Item directory. 

To edit this DataTable, we now use a tool called DQXIAsset -- this allows us to convert it to a csv file and back. 

Here is a csv of DT_ItemTable, along with the original DataTable files: https://drive.google.com/file/d/1Isp-NFUDtI_BuFG3FGagKm_kGxqhBhSt/view

Place all three of these files next to DQXIAsset.exe in the same folder.

Now let's edit the .csv: notepad++ is recommended for this.

------------------------------------------------------------------

You're going to see a whole bunch of lines like this: W_SWD_0027,+Item+ItemNameID_W_SWD_0046,121,1,1832,121,2,Sword,None,0,0,750000,0,"",GetCommonItem,EJackItemGetIcon__Item,Game_ItemUnitName_KO,+Item+DescriptionID_W_SWD_0046,None,Item_NanimoOkoranai,None,None,194,20,10,30,10,0,3,0,0,0,0,50,40,10,70,100,65,EJackItem_ParameterType__Kougekiryoku,EJackItem_ParameterType__Unknown,EJackItem_ParameterType__Unknown,EJackItem_ParameterType__Unknown,ODD_DEFAULT_NikaiKougeki,None,None,ODD_DMUP_DRAGON1,true,true,false,false,false,true,false,false,true,1,false,false,EJackItem_SellType__OK,EJackItem_DiscardType__OK,true,true,0,/Game/UIs_common/Texture/Icon/Category/T_Hud_Icon_Item_Category_Katateken.T_Hud_Icon_Item_Category_Katateken,/Game/UIs_common/Texture/Icon/Weapon/T_Hud_Icon_Item_W_SWD_0027.T_Hud_Icon_Item_W_SWD_0027,None,/Game/Characters/Weapon/W120/Mesh/SM_W120_E516_Body.SM_W120_E516_Body,None,/Game/Characters/Weapon/W120/Mesh/SM_W120_E516_Case.SM_W120_E516_Case,None,None,EJackItem_EquipmentSE__Default,263

Let's start making sense of it. The best thing to know when it comes to any of these DataTables is that most of these fields are defined within DQXI-SDK's code 

[More details are provided on this at the bottom of this article]

Here is what we're interested in: first we have our item ID. This can be located by using our Item ID documentation. In this case, SWD_0027 is the Uber Falcon Blade.

Next, we're going to skip over to that big juicy number: 750000 -- that field controls how much gold our item costs at any shop in the game. (Note that Casino token costs are controlled by a different table entirely)

Now, let's skip over to the most interesting part: that large set of 1-to-3 digit numbers separated by commas. This is our weapon stats. From left-to-right, we have:
Offense: 194
Defense: 20
MP Absorbtion: 10
Parry Rate: 30
Block Rate: 10
Evasiveness Rate: 0
Critical Rate: 3
ZoneOn (pep-up) Rate: 0
Tikara (Strength): 0 --> this just adds to the "offense" stat AFAIK
Minomamori (Resilience): 0 --> this just adds to the "defense" stat AFAIK
Kiyousa ("Deftness"): 0
Agility: 50
Magical Might: 40
Magical Mending: 10
Max HP (bonus): 70
Max MP (bonus): 100
Charm: 65


There are a number of other interesting fields, but that covers the big stuff. (Again, more details are provided at the bottom)

----------------------------

FInally, you'll want to save your csv changes, and drag-and-drop your edited .csv file to DQAsset.exe.

It will create a new set of files called DT_ItemTable_mod (.uasset and .uexp). You should move these to a different folder and rename them back to DT_ItemTable.

Now you can test these using DQXI-SDK (or DQXISHook): go into <steamapps>\common\DRAGON QUEST XI S\Game\Content\ and create these directories: DataTables\Item\

So you will have: DRAGON QUEST XI S\Game\Content\DataTables\Item\DT_ItemTable.uasset and DT_ItemTable.uexp



You can also pack your mod up for distribution using the packing section of our guide (none of the texture modding stuff is needed, just the last section -- you can grab the packer exe here)

----------------------------

[Extra nitty-gritty details here]


This is the struct that was used for parsing the DataTable here (if you're not so inclined, you may skip this part -- this is a general guide for those that may want to edit other tables): 

// ScriptStruct JackGame.JackDataTableItem// 0x01E0 (0x01E8 - 0x0008)
struct FJackDataTableItem : public FTableRowBase
{
struct FNameItemNameID; // 0x0008(0x0008) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
intSortNo;// 0x0010(0x0004) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
intStrengthNo; // 0x0014(0x0004) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
intPhoneticNo; // 0x0018(0x0004) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
intPictorialBookNo;// 0x001C(0x0004) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
intLapNo; // 0x0020(0x0004) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
unsigned char UnknownData00[0x4];// 0x0024(0x0004) MISSED OFFSET
struct FNameClassificationID; // 0x0028(0x0008) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
struct FNameRecipeBookID;// 0x0030(0x0008) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
intRarity;// 0x0038(0x0004) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
intPlusValue;// 0x003C(0x0004) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
intPrice_Buying;// 0x0040(0x0004) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
intPrice_Selling; // 0x0044(0x0004) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
struct FString GetMEType;// 0x0048(0x0010) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance)
struct FNameGetSEID; // 0x0058(0x0008) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
TEnumAsByte<EJackItemGetIcon> GetIconType; // 0x0060(0x0001) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
unsigned char UnknownData01[0x7];// 0x0061(0x0007) MISSED OFFSET
struct FNameUnitNameID; // 0x0068(0x0008) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
struct FNameDescriptionID; // 0x0070(0x0008) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
struct FNameSpecificAbilityDescriptionID; // 0x0078(0x0008) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
struct FNameUsingActionID; // 0x0080(0x0008) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
struct FNameUsingEvent; // 0x0088(0x0008) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
struct FNameUsingEventParameter; // 0x0090(0x0008) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
intParameterCorrection_Kougekiryoku; // 0x0098(0x0004) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
intParameterCorrection_Syubiryoku;// 0x009C(0x0004) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
float ParameterCorrection_MPKyuuSyuuRate; // 0x00A0(0x0004) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
float ParameterCorrection_BukiGuardRate;// 0x00A4(0x0004) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
float ParameterCorrection_TateGuardRate;// 0x00A8(0x0004) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
float ParameterCorrection_MikawasiRate; // 0x00AC(0x0004) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
float ParameterCorrection_CriticalRate; // 0x00B0(0x0004) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
float ParameterCorrection_ZoneOnRate;// 0x00B4(0x0004) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
intParameterCorrection_Tikara; // 0x00B8(0x0004) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
intParameterCorrection_Minomamori;// 0x00BC(0x0004) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
intParameterCorrection_Kiyousa;// 0x00C0(0x0004) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
intParameterCorrection_Subayasa; // 0x00C4(0x0004) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
intParameterCorrection_KougekiMaryoku; // 0x00C8(0x0004) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
intParameterCorrection_KaifukuMaryoku; // 0x00CC(0x0004) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
intParameterCorrection_MaxHP; // 0x00D0(0x0004) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
intParameterCorrection_MaxMP; // 0x00D4(0x0004) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
intParameterCorrection_Miryoku;// 0x00D8(0x0004) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
TEnumAsByte<EJackItem_ParameterType>MajorParameter1;// 0x00DC(0x0001) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
TEnumAsByte<EJackItem_ParameterType>MajorParameter2;// 0x00DD(0x0001) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
TEnumAsByte<EJackItem_ParameterType>MajorParameter3;// 0x00DE(0x0001) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
TEnumAsByte<EJackItem_ParameterType>MajorParameter4;// 0x00DF(0x0001) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
struct FNameOddEffectID_01; // 0x00E0(0x0008) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
struct FNameOddEffectID_02; // 0x00E8(0x0008) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
struct FNameOddEffectID_03; // 0x00F0(0x0008) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
struct FNameOddEffectID_04; // 0x00F8(0x0008) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
bool bEquipmentPossible_P001; // 0x0100(0x0001) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
bool bEquipmentPossible_P002; // 0x0101(0x0001) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
bool bEquipmentPossible_P003; // 0x0102(0x0001) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
bool bEquipmentPossible_P004_2; // 0x0103(0x0001) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
bool bEquipmentPossible_P004_3; // 0x0104(0x0001) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
bool bEquipmentPossible_P005; // 0x0105(0x0001) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
bool bEquipmentPossible_P006; // 0x0106(0x0001) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
bool bEquipmentPossible_P007; // 0x0107(0x0001) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
bool bEquipmentPossible_P008; // 0x0108(0x0001) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
unsigned char UnknownData02[0x3];// 0x0109(0x0003) MISSED OFFSET
intEquipmentLevel; // 0x010C(0x0004) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
bool bCanConsume; // 0x0110(0x0001) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
bool bCanBuy; // 0x0111(0x0001) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
TEnumAsByte<EJackItem_SellType> SellType; // 0x0112(0x0001) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
TEnumAsByte<EJackItem_DiscardType> DiscardType; // 0x0113(0x0001) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
bool bLeaveAtSort;// 0x0114(0x0001) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
bool bStoreCommonBag;// 0x0115(0x0001) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
unsigned char UnknownData03[0x2];// 0x0116(0x0002) MISSED OFFSET
intLimitedNumber; // 0x0118(0x0004) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
unsigned char UnknownData04[0x4];// 0x011C(0x0004) MISSED OFFSET
unsigned char UnknownData05[0x18]; // 0x011C(0x0018) UNKNOWN PROPERTY: SoftObjectProperty JackGame.JackDataTableItem.MenuIconTexture
unsigned char UnknownData06[0x18]; // 0x0138(0x0018) UNKNOWN PROPERTY: SoftObjectProperty JackGame.JackDataTableItem.PictureBookIconTexture
unsigned char UnknownData07[0x18]; // 0x0150(0x0018) UNKNOWN PROPERTY: SoftObjectProperty JackGame.JackDataTableItem.PopIconTexture
unsigned char UnknownData08[0x18]; // 0x0168(0x0018) UNKNOWN PROPERTY: SoftObjectProperty JackGame.JackDataTableItem.EquipmentStaticMesh_Main
unsigned char UnknownData09[0x18]; // 0x0180(0x0018) UNKNOWN PROPERTY: SoftObjectProperty JackGame.JackDataTableItem.EquipmentStaticMesh_Main_L
unsigned char UnknownData10[0x18]; // 0x0198(0x0018) UNKNOWN PROPERTY: SoftObjectProperty JackGame.JackDataTableItem.EquipmentStaticMesh_Sub
unsigned char UnknownData11[0x18]; // 0x01B0(0x0018) UNKNOWN PROPERTY: SoftObjectProperty JackGame.JackDataTableItem.EquipmentSkeletalMesh_Main
unsigned char UnknownData12[0x18]; // 0x01C8(0x0018) UNKNOWN PROPERTY: SoftObjectProperty JackGame.JackDataTableItem.EquipmentSkeletalMesh_Sub
TEnumAsByte<EJackItem_EquipmentSE> EquipmentSE; // 0x01E0(0x0001) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
unsigned char UnknownData13[0x3];// 0x01E1(0x0003) MISSED OFFSET
intTripleItemNo;// 0x01E4(0x0004) (Edit, BlueprintVisi, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
};

Article information

Added on

Edited on

Written by

mike9k1

1 comment

  1. o929634635
    o929634635
    • member
    • 0 kudos
    I pack according to this article , DT_ItemTable.uexp and DT_ItemTable.uasset. Start the game but it crashes?