But can we include our own books to spawn in the world, or only change the existing ones through the XML?
There are a few xml files that define the world:
ObjectBlueprints.xml - This defines every object in the game in terms of "Parts" and paramaters for those parts, which are individual component classes that define or override behavior. You can composite any parts together, and there are lots of them. You can't add a new part without changing the code, but the existing parts can be used in lots of ways. Objects have lots of other things like statistics and stuff, but parts are the most critical. For example, you could create whole new book objects here, refering to a new entry in "Books.xml" and then adding the entry to an appropriate table in "EncounterTables.xml"
Worlds.xml - This defines a whole 80x25 world map, the engine supports any number, though we only have one at the moment. You define each 3x3xhowever deep cell in terms of Maps (hard-coded, made in rougepaint.exe), Builders (classes that know how to build zones), and Encounters, which refer to entries in EncounterTables.xml
EncounterTables.xml - This defines encounter tables used in Worlds.xml as well as various loot-generation parts.
Quests.xml - This defines the quests in the game, refering to quest management parts that can't be created without changing code.
Conversations.xml - This defines the in game conversations used by the ConversationScript part.
Books.xml - This defines book text used by Book part and Story property.
Commands.xml - This defines the commands and command text used by the game, but you can't add new commands without changing code.
Mods.xml - This defines the weapon mods, but you can't add new mods without changing code.
Options.xml - This defines the in-game optins list, but you can't add new options without changing code.
Skills.xml - This defines in-game skills and their attributes. You can't add new skills without changing code, but you can modify costs and prerequisites here.
So you can add all new objects, including books, and areas very easily; but adding new core behavior mostly requires code changes at this point. It wouldn't be too hard to add dynamically-scripted-Part system using something like LUA or even dynamically compiled .NET code, but I haven't written the infrastructure to fully support it, and dont' really plan on it for the moment, since I don't really need it.