====== Getting Started with Modding ======
This guide will help you create your first mod for Remixed Dungeon. We'll start with simple modifications and work up to more complex ones.
===== Prerequisites =====
Before starting, make sure you have:
* A copy of Remixed Dungeon installed
* A text editor or IDE for editing files
* Basic understanding of JSON format
* Basic understanding of file organization
===== Your First Simple Mod: Resource Override =====
==== Step 1: Create a Mod Directory ====
* Navigate to your game's files directory: ''Android/data/com.nyrds.pixeldungeon.ml/files/'' (on Android)
* Create a new folder for your mod (e.g., "MyFirstMod")
==== Step 2: Add Required Files ====
* Inside your mod folder, create a ''version.json'' file
* Add this basic content to the file:
{
"version": 1,
"name": "My First Mod"
}
==== Step 3: Override a Resource ====
* Download a simple image (e.g., a PNG file) that could replace an item sprite
* In your mod folder, create the directory structure to match the original game: ''items/weapon/''
* Place your image file in this directory with the same name as the original sprite you want to replace (e.g., ''dagger.png'' to replace the dagger sprite)
==== Step 4: Test Your Mod ====
* Launch Remixed Dungeon
* Go to the Mods menu and enable your mod
* Start a new game to see your changes
===== Your First JSON Mod: Changing Item Properties =====
==== Step 1: Find the Item File ====
* Locate the JSON configuration for the item you want to modify in the game's assets
* For example, weapon properties might be in ''items/weapon/'' in files like ''short_sword.json''
==== Step 2: Copy to Your Mod ====
* Copy the JSON file to your mod folder in the same directory structure
* Modify the properties you want to change (e.g., damage, level requirements)
Example modification:
{
"class": "com.watabou.pixeldungeon.items.weapon.melee.ShortSword",
"name:en": "Modified Short Sword",
"name:ru": "Модифицированный короткий меч",
"damageMin": 3, // Original value might be 4
"damageMax": 8, // Original value might be 8
"ac": "ATTACK",
"imageIndex": 0
}
==== Step 3: Test Your Changes ====
* Make sure your mod is enabled
* Start a new game to see the modified item properties
===== Understanding the Directory Structure =====
The game's assets follow a specific organization:
* ''actors/'' - Mobs, NPCs, and other entities
* ''actors/mobs/'' - Monster definitions
* ''actors/buffs/'' - Status effects
* ''items/'' - All items in the game
* ''items/weapon/'' - Weapons
* ''items/armor/'' - Armor
* ''items/rings/'' - Rings
* ''items/potions/'' - Potions
* ''items/scrolls/'' - Scrolls
* ''levelsDesc/'' - Level definitions and dungeon structure
* ''res/'' - Text strings and localization
* ''res/values/'' - English texts
* ''res/values-ru/'' - Russian texts
* ''sounds/'' - Sound effects
* ''music/'' - Background music
* ''sprites/'' - Game graphics
===== Basic JSON Modding =====
==== Changing Text ====
To modify in-game text, create a ''res/values/strings.json'' file in your mod:
{
"DungeonTitle": "My Custom Dungeon",
"WelcomeMsg": "Welcome to my modded version!"
}
==== Modifying Mobs ====
To change a mob's properties, copy the mob's JSON file to your mod:
{
"class": "com.watabou.pixeldungeon.actors.mobs.Rat",
"name:en": "Giant Rat",
"HP": 15, // Higher HP
"damageMin": 3, // Higher damage
"damageMax": 6, // Higher damage
"exp": 3, // More experience
"loot": "gold", // Additional loot
"lootChance": 0.5 // Higher chance for loot
}
===== Using Lua Scripts for Advanced Mods =====
For more complex modifications, you can use Lua scripts. The correct approach uses specialized libraries:
Example: ''items/custom_item.lua''
local RPD = require "scripts/lib/commonClasses"
local item = require "scripts/lib/item"
return item.init{
desc = function()
return {
image = 0,
imageFile = "items.png",
name = "Explosive Item",
info = "An explosive item that damages enemies when thrown.",
stackable = true,
upgradable = false,
isFlies = true,
defaultAction = "THROW"
}
end,
onThrow = function(self, cell, user)
-- Custom behavior when item is thrown
RPD.glog("Custom item thrown at " .. cell.x .. ", " .. cell.y)
-- Add explosion effect
-- Blast functionality would need to be implemented using specific game mechanics
RPD.topEffect(RPD.Dungeon.level():cell(cell.x, cell.y), "blast")
end
}
Reference the script in your item's JSON using the correct format:
{
"class": "com.watabou.pixeldungeon.items.Item",
"name:en": "Explosive Item"
}
Note: Modern Remixed Dungeon uses the library-based approach that's defined entirely in the Lua file rather than through JSON script references.
===== Testing and Debugging Your Mod =====
==== Common Issues ====
* **Mod not loading**: Check that your ''version.json'' file exists and is properly formatted
* **Changes not showing**: Make sure the file paths exactly match the original game structure
* **JSON errors**: Use a JSON validator to check for syntax errors
* **Game crashes**: Check for missing or incorrectly formatted properties
==== Debugging Tips ====
* Start with simple changes before moving to complex modifications
* Use the game's existing files as examples
* Test frequently to isolate problems
* Keep backups of working configurations
===== Sharing Your Mod =====
When your mod is complete and tested:
* Package all your mod files in a ZIP archive
* Include clear instructions and documentation
* Test on multiple devices if possible
* Share on the Remixed Dungeon Discord server
* Consider uploading to mod distribution platforms
===== Next Steps =====
Once you're comfortable with basic modding:
* Explore more complex JSON configurations
* Learn Lua scripting for dynamic behavior
* Create custom levels using Tiled
* Join the modding community for tips and feedback
* Look at existing mods like [[https://github.com/NYRDS/Maze-RPD-MOD|Maze]] to understand advanced techniques
Remember to always backup your save files before testing new mods!