Hi all, I hope you like this mod. If you liked it don't forget to endorse and check my other mod LD's New Potions. These two mods are compatible with each other. However, if you're using the Rich Merchants or A Little Richer Merchants mods, you'll need a compatibility file that includes both the book and potion mods. It has now been added to the optional files. The compatibility files in both mods are completely the same, even though their versions may differ.
If you have a good short story, feel free to share it with me (preferably via DM instead of comments to avoid spoilers), and I can consider adding it to the game in a future update.
Some people have reached out to me for language support. Since there's a lot of text to be translated and the modding activity for KCD2 has decreased quite a bit compared to its early days, I didn't expect there would be too many people willing to help with translations. So for now, I’ve added support for English, Turkish, Chinese (both Simplified and Traditional), German, Czech, and Russian languages. The German translation was done entirely by angryval. The Spanish translation was done entirely by Sir4ndy80. The Czech translation was done using AI and then had some errors fixed by Sam15SVK.
Aside from Turkish and English, the other languages were translated with AI assistance, so they may contain some mistakes. Unfortunately, I don’t speak these languages myself, so I can't verify them personally. If any of you correct the errors and send them back to me, I’ll update the files accordingly.
If you're playing the game in English, there's no need to download the update. However, if Turkish, I recommend installing the update since a few typos have been fixed.
Currently, it's both the Ramadan Bayram and a time of major protests in Turkey (Eid Mubarak to all Muslims), so I’m quite busy and will have to delay support for those requesting other languages.
Hi, can you tell me which merchants are affected? I've got some armour mods so I'd like to know if the same vendors might get the books and result in a conflict
It’s hard to remember all of them, but I avoided giving these books to merchants who sell armor and weapons. Mainly, I distributed the books to scribes, some skill trainers, and maybe a few merchants. So, there shouldn’t be any problem.
If you want to be safe, I suggest learning how to merge them. Personally, I remove InventoryPreset__shops from mods and create a new mod that combines all of them. Sometimes, I also add items that aren’t distributed at all. There are lots of mods on Nexus that add new items, but they’re only available via console commands or are added directly to your inventory/chest. I’ll try to add a tutorial here.
hi lecdabster, thanks for all the awesome aditional books. :)
I have a question, where I hope you can at least point me in the right direction. I am trying to mod more XP from skillbooks (and combine that with Slower Reading and Tougher Eco), but none of the following works :(
First I was trying a high value for RPG.ReadingSpeechXPBase = 150 --> but that only increases scholarship XP gain per book.
Then I was looking at your files and tried to edit some values to re-PAK
<document_required_skill item_id="00cbcdca-e6ee-4fe6-bf87-2acd9f2b21aa" skill_id="16" skill_level_required="0" skill_xp_gained="50000000" /> the values are extreme, but do not change anything :/ Can you give me a hint where to look for?
Let me look at after the work. I have an idea that might work, but need to check first. Btw, maybe you forgot to use a pak builder. If you are just changing the extension to pak, it will not work.
UPDATE: I changed the values like you did and it works. So, as I said above, you might have forgotten to use a PAK builder. The two mods you mentioned use completely different tables. So you can use them safely, there is no need for compatibility patches. If I remember correctly, there is no multiplier that you can change to automatically increase the XP rewards for skill books. So, you might need to change them manually.
I suggest creating an empty mod first. Copy the vanilla XML files into your mod without changing their locations (if it is located in somewhere xxx/yyy/zzz/abc.xml, then put the xml file inside zzz folder that is inside a yyy folder that is inside a xxx folder), then modify all the values as you like. After that, package the inside of the data folder into a PAK file (you can find a PAK builder on Nexus). In other words, don’t make a PTF mod, your table will replace the entire original table. If you want to use my mod, change the files in my mod directly; don’t create another mod.
Thank you very much :D I forgot to name the files with the Mod Id at the end. Basicly like "document_required_skill____modid.xml" ... there is so much to learn :-).
Today I've read through a lot of the modding guideslines, where they mentioned two table modes. Only the new format seems to have PTF support (https://warhorse.youtrack.cloud/articles/KM-A-12/Database-tables). Unfortunatelly, all the "rpg/document_" files are "OLD" ... Therefore I have to merge the vanilla and your ld_skillbooks into one mod.
BTW: Do you mind me uploading this as a new mod (5x Skillbook XP) with your edited "document_reward__ldbooks.xml" as optional? I am not finished, yes. I need to find the XP gains for Lessons - only found the prices so far.
Sure, you aren’t copying any of my work. I don’t usually prefer “easier game” mods, but I’ll definitely check out your mod.
You might want to check DocumentRarities.xml (inside Libs/Tables/rpg). Each book has a rarity, and different rarities provide different multipliers. In vanilla, books with no rarity give nothing (in terms of scholar and speech XP), like most of the skill books. You can change that too. Also, you can check reading_spot_type.xml. I don’t know where the XP gains for the lessons are stored, but you can use my Python code to search for possible keywords to find it.
import os def search_text_in_files(root_folder, search_text, extensions=(".xml", ".lua")): matched_files = [] for dirpath, dirnames, filenames in os.walk(root_folder): for filename in filenames: if filename.endswith(extensions): file_path = os.path.join(dirpath, filename) try: with open(file_path, "r", encoding="utf-8") as f: content = f.read() if search_text in content: matched_files.append(file_path) except UnicodeDecodeError: # Some files may contain different encodings, you can add other attempts here if you like. pass except Exception as e: print(f"Error reading {file_path}: {e}") return matched_files if __name__ == "__main__": folder = "D:\Modding\kc2" # Replace this with your own main folder path. searched_text = "SkillLesson" # Write the text you want to search for here. found_ones = search_text_in_files(folder, searched_text) print("\nFiles containing the text:") for files in found_ones: print(files)
I store the vanilla files somewhere. Not the PAK files, but the XML files, scripts, and other stuff (in the code, it’s D:\Modding\kc2). This code searches for the specified searched_text inside those vanilla files. I only included .lua and .xml files, which is enough. If you have a similar folder with the vanilla files, you can replace the folder and searched_text values in the code with yours and search through the files.
Hey, so one question do we have to download the localization file and just drop it into the mods folder ? or do i have to extract the pak file from inside and combine it into the mail file ?
In Mods\ldbooks folder, there are a localization and a data folders. The update file is localization file here. Just put it there and overwrite Turkish_xml.pak and English_xml.pak if asks.
This error usually happens if a nonexistent item is referenced in the .xml files. The 20k and 10k versions are exactly the same except for the amount of money. I don't know what causes it specifically, but I will check when I have time.
Funnily enough I actually came back to say: for some reason it crashed when I tried the 10K, so then replaced with the 20K, and it worked fine for several hours (uninterrupted gameplay), then later when I came back to it, neither the 10k nor 20k worked ...
Here is part of the log:
Sign in the default user... Table 'buff' is patched by 'buff__cheat', lines added: 29, modified: 0, equal: 0, time: 0.000 Table 'buff' is patched by 'buff__devilsdeal', lines added: 3, modified: 0, equal: 0, time: 0.000 Table 'angriness_flag' is patched by 'angriness_flag__factions_authority', lines added: 0, modified: 1, equal: 9, time: 0.000 Table 'rpg_param' is patched by 'rpg_param__increasedcarryweight', lines added: 1, modified: 1, equal: 0, time: 0.000 Table 'rpg_param' is patched by 'rpg_param__themasterpickpocketlite', lines added: 5, modified: 3, equal: 0, time: 0.000 Table 'reputation_change' is patched by 'reputation_change__zmagusinstantreputationnotificationsliteextensive', lines added: 0, modified: 188, equal: 0, time: 0.000 Table 'reputation_notification' is patched by 'reputation_notification__zmagusinstantreputationnotificationsliteextensive', lines added: 196, modified: 0, equal: 0, time: 0.000 Initializing the Sound Module ... Sound Module Initialized Initializing the Music Manager ... music_address_keyword has 124 item(s) music_world_state_toggle has 290 item(s) music_world_quantity has 9 item(s) music_matrix has 122 item(s) Music probe 'C_SkirmishProbe' successfully initialized. Music probe 'C_TimeOfDayProbe' successfully initialized. Music probe 'C_GameSessionProbe' successfully initialized. Music probe 'C_PlayableCharacterProbe' successfully initialized. Music probe 'C_WeatherProbe' successfully initialized. Music probe 'C_LocationProbe' successfully initialized. Music probe 'C_CrimeProbe' successfully initialized. Music Manager initialized ============================================================================= *ERROR ============================================================================= Database system error - tables can't be loaded. Possibly caused by outdated or corrupted mods. See kcd.log for more details. <CrySystem> Last System Error: Cannot create a file when that file already exists.
I just checked the compatibility files and didn’t encounter any crashes. There's also nothing in the log related to this mod, and no one else has reported this issue so far.
I'm not sure if the error is actually related to the compatibility file. It's strange that the game crashes when using them. Sorry I couldn’t be more helpful. My game also crashes, even without mods, around the woodcamp near Rabstein. Maybe you encountered something similar.
Hey, sorry if I mis-spoke, it doesn't crash within the game, it crashes a few seconds after launching the game, before even getting to menu or anything.
As soon as I remove the mod, no issues whatsoever.
I do appreciate you trying, but some of us are just flukes, I'll occasionally try to see if it fixed itself. Glad it works for everyone else.
I didn’t mean to sound bossy, I just couldn’t find a reason for the crash. As I mentioned, this type of crash usually happens when there’s a problematic or nonexistent entry in a .xml file, like when an item is added to an inventory but that item doesn’t actually exist.
However, if that were the case, I should have encountered the crash too, but I didn’t. So, the problem should be another thing. And honestly, I’m not sure how to solve it.
Iecdabstar, I really appreciate how much work your putting into the compatibility patches. Please don't burn yourself out of modding when you need to maintain so many. We need to keep your great ideas and work around for a while :D
Yes, I completely forgot that the RM compatibility files in both mods are overwriting each other. So, I need to upload a version that contains both of my mods. I will do today.
49 comments
If you have a good short story, feel free to share it with me (preferably via DM instead of comments to avoid spoilers), and I can consider adding it to the game in a future update.
Some people have reached out to me for language support. Since there's a lot of text to be translated and the modding activity for KCD2 has decreased quite a bit compared to its early days, I didn't expect there would be too many people willing to help with translations. So for now, I’ve added support for English, Turkish, Chinese (both Simplified and Traditional), German, Czech, and Russian languages. The German translation was done entirely by angryval. The Spanish translation was done entirely by Sir4ndy80. The Czech translation was done using AI and then had some errors fixed by Sam15SVK.
Aside from Turkish and English, the other languages were translated with AI assistance, so they may contain some mistakes. Unfortunately, I don’t speak these languages myself, so I can't verify them personally. If any of you correct the errors and send them back to me, I’ll update the files accordingly.
If you're playing the game in English, there's no need to download the update. However, if Turkish, I recommend installing the update since a few typos have been fixed.
Currently, it's both the Ramadan Bayram and a time of major protests in Turkey (Eid Mubarak to all Muslims), so I’m quite busy and will have to delay support for those requesting other languages.
Happy gaming and happy modding!
If you want to be safe, I suggest learning how to merge them. Personally, I remove InventoryPreset__shops from mods and create a new mod that combines all of them. Sometimes, I also add items that aren’t distributed at all. There are lots of mods on Nexus that add new items, but they’re only available via console commands or are added directly to your inventory/chest. I’ll try to add a tutorial here.
I'd really appreciate if you could write a tutorial^^
thanks for all the awesome aditional books. :)
I have a question, where I hope you can at least point me in the right direction. I am trying to mod more XP from skillbooks (and combine that with Slower Reading and Tougher Eco), but none of the following works :(
<document_reward item_id="1c77df11-f996-4d9e-bb87-b2430e0875b3" script="RPG.AddStatXP(event, soul, "agility", 10000000, oldProgress, newProgress);RPG.NotifyLevelXpGain("agility");" />
or for vanilla perk-skill-books:
<document_required_skill item_id="00cbcdca-e6ee-4fe6-bf87-2acd9f2b21aa" skill_id="16" skill_level_required="0" skill_xp_gained="50000000" />
the values are extreme, but do not change anything :/ Can you give me a hint where to look for?
UPDATE: I changed the values like you did and it works. So, as I said above, you might have forgotten to use a PAK builder. The two mods you mentioned use completely different tables. So you can use them safely, there is no need for compatibility patches. If I remember correctly, there is no multiplier that you can change to automatically increase the XP rewards for skill books. So, you might need to change them manually.
I suggest creating an empty mod first. Copy the vanilla XML files into your mod without changing their locations (if it is located in somewhere xxx/yyy/zzz/abc.xml, then put the xml file inside zzz folder that is inside a yyy folder that is inside a xxx folder), then modify all the values as you like. After that, package the inside of the data folder into a PAK file (you can find a PAK builder on Nexus). In other words, don’t make a PTF mod, your table will replace the entire original table. If you want to use my mod, change the files in my mod directly; don’t create another mod.
Today I've read through a lot of the modding guideslines, where they mentioned two table modes. Only the new format seems to have PTF support (https://warhorse.youtrack.cloud/articles/KM-A-12/Database-tables). Unfortunatelly, all the "rpg/document_" files are "OLD" ... Therefore I have to merge the vanilla and your ld_skillbooks into one mod.
BTW: Do you mind me uploading this as a new mod (5x Skillbook XP) with your edited "document_reward__ldbooks.xml" as optional? I am not finished, yes. I need to find the XP gains for Lessons - only found the prices so far.
You might want to check DocumentRarities.xml (inside Libs/Tables/rpg). Each book has a rarity, and different rarities provide different multipliers. In vanilla, books with no rarity give nothing (in terms of scholar and speech XP), like most of the skill books. You can change that too. Also, you can check reading_spot_type.xml. I don’t know where the XP gains for the lessons are stored, but you can use my Python code to search for possible keywords to find it.
import os
def search_text_in_files(root_folder, search_text, extensions=(".xml", ".lua")):
matched_files = []
for dirpath, dirnames, filenames in os.walk(root_folder):
for filename in filenames:
if filename.endswith(extensions):
file_path = os.path.join(dirpath, filename)
try:
with open(file_path, "r", encoding="utf-8") as f:
content = f.read()
if search_text in content:
matched_files.append(file_path)
except UnicodeDecodeError:
# Some files may contain different encodings, you can add other attempts here if you like.
pass
except Exception as e:
print(f"Error reading {file_path}: {e}")
return matched_files
if __name__ == "__main__":
folder = "D:\Modding\kc2" # Replace this with your own main folder path.
searched_text = "SkillLesson" # Write the text you want to search for here.
found_ones = search_text_in_files(folder, searched_text)
print("\nFiles containing the text:")
for files in found_ones:
print(files)
I store the vanilla files somewhere. Not the PAK files, but the XML files, scripts, and other stuff (in the code, it’s D:\Modding\kc2). This code searches for the specified searched_text inside those vanilla files. I only included .lua and .xml files, which is enough. If you have a similar folder with the vanilla files, you can replace the folder and searched_text values in the code with yours and search through the files.
This despite choosing the correct rich merchants compatibility pak;
The 10K one seems to be doing it, as 20k worked (didn't bother to check 30K).
Here is part of the log:
Sign in the default user...
Table 'buff' is patched by 'buff__cheat', lines added: 29, modified: 0, equal: 0, time: 0.000
Table 'buff' is patched by 'buff__devilsdeal', lines added: 3, modified: 0, equal: 0, time: 0.000
Table 'angriness_flag' is patched by 'angriness_flag__factions_authority', lines added: 0, modified: 1, equal: 9, time: 0.000
Table 'rpg_param' is patched by 'rpg_param__increasedcarryweight', lines added: 1, modified: 1, equal: 0, time: 0.000
Table 'rpg_param' is patched by 'rpg_param__themasterpickpocketlite', lines added: 5, modified: 3, equal: 0, time: 0.000
Table 'reputation_change' is patched by 'reputation_change__zmagusinstantreputationnotificationsliteextensive', lines added: 0, modified: 188, equal: 0, time: 0.000
Table 'reputation_notification' is patched by 'reputation_notification__zmagusinstantreputationnotificationsliteextensive', lines added: 196, modified: 0, equal: 0, time: 0.000
Initializing the Sound Module ...
Sound Module Initialized
Initializing the Music Manager ...
music_address_keyword has 124 item(s)
music_world_state_toggle has 290 item(s)
music_world_quantity has 9 item(s)
music_matrix has 122 item(s)
Music probe 'C_SkirmishProbe' successfully initialized.
Music probe 'C_TimeOfDayProbe' successfully initialized.
Music probe 'C_GameSessionProbe' successfully initialized.
Music probe 'C_PlayableCharacterProbe' successfully initialized.
Music probe 'C_WeatherProbe' successfully initialized.
Music probe 'C_LocationProbe' successfully initialized.
Music probe 'C_CrimeProbe' successfully initialized.
Music Manager initialized
=============================================================================
*ERROR
=============================================================================
Database system error - tables can't be loaded.
Possibly caused by outdated or corrupted mods.
See kcd.log for more details.
<CrySystem> Last System Error: Cannot create a file when that file already exists.
I'm not sure if the error is actually related to the compatibility file. It's strange that the game crashes when using them. Sorry I couldn’t be more helpful. My game also crashes, even without mods, around the woodcamp near Rabstein. Maybe you encountered something similar.
As soon as I remove the mod, no issues whatsoever.
I do appreciate you trying, but some of us are just flukes, I'll occasionally try to see if it fixed itself. Glad it works for everyone else.
However, if that were the case, I should have encountered the crash too, but I didn’t. So, the problem should be another thing. And honestly, I’m not sure how to solve it.