====== Chests - Code References ======
==== Java Classes ====
* **Heap Types**: [[https://github.com/NYRDS/remixed-dungeon/blob/master/RemixedDungeon/src/main/java/com/watabou/pixeldungeon/items/Heap.java|Heap.java]] - Defines CHEST, LOCKED_CHEST, CRYSTAL_CHEST types
* **Open Chest Action**: [[https://github.com/NYRDS/remixed-dungeon/blob/master/RemixedDungeon/src/main/java/com/nyrds/pixeldungeon/ml/actions/OpenChest.java|OpenChest.java]] - Handles chest opening logic
* **Level Treasure**: [[https://github.com/NYRDS/remixed-dungeon/blob/master/RemixedDungeon/src/main/java/com/watabou/pixeldungeon/levels/Level.java|Level.java]] - Locked/crystal chest handling
* **Room Painters**: Various painters place chests:
- [[https://github.com/NYRDS/remixed-dungeon/blob/master/RemixedDungeon/src/main/java/com/watabou/pixeldungeon/levels/painters/VaultPainter.java|VaultPainter.java]] - Places LOCKED_CHEST and CRYSTAL_CHEST
- [[https://github.com/NYRDS/remixed-dungeon/blob/master/RemixedDungeon/src/main/java/com/watabou/pixeldungeon/levels/painters/TreasuryPainter.java|TreasuryPainter.java]] - Places CHEST (may spawn Mimic)
- [[https://github.com/NYRDS/remixed-dungeon/blob/master/RemixedDungeon/src/main/java/com/watabou/pixeldungeon/levels/painters/PoolPainter.java|PoolPainter.java]] - Places CHEST
- [[https://github.com/NYRDS/remixed-dungeon/blob/master/RemixedDungeon/src/main/java/com/watabou/pixeldungeon/levels/painters/TrapsPainter.java|TrapsPainter.java]] - Places CHEST
- [[https://github.com/NYRDS/remixed-dungeon/blob/master/RemixedDungeon/src/main/java/com/watabou/pixeldungeon/levels/painters/RatKingPainter.java|RatKingPainter.java]] - Places CHEST (may spawn Mimic)
==== Java Class Content ====
// Heap.java - Chest type definitions
public enum Type {
// ...
CHEST,
LOCKED_CHEST,
CRYSTAL_CHEST,
// ...
}
// Heap.java - Chest spawn weights
static {
regularHeaps.put(Type.CHEST, 4f);
sageHeaps.put(Type.CHEST, 4f);
}
// OpenChest.java - Chest opening logic
public class OpenChest extends CharAction {
public OpenChest(int dst) {
// ...
if (heap != null && (heap.type == Heap.Type.CHEST
|| heap.type == Heap.Type.TOMB
|| heap.type == Heap.Type.SKELETON
|| heap.type == Heap.Type.LOCKED_CHEST
|| heap.type == Heap.Type.CRYSTAL_CHEST
|| heap.type == Heap.Type.MIMIC)) {
// Handle chest opening
if (heap.type == Heap.Type.LOCKED_CHEST
|| heap.type == Heap.Type.CRYSTAL_CHEST) {
// Requires key
if (!hasKey) {
GLog.w(StringsManager.getVar(R.string.Hero_LockedChest));
}
}
}
}
}
==== Key Properties from Code ====
* **Chest Types**:
- `CHEST` - Regular chest, can be opened freely
- `LOCKED_CHEST` - Requires skeleton key to open
- `CRYSTAL_CHEST` - Requires crystal key to open
- `MIMIC` - May appear instead of CHEST (hostile monster)
* **Spawn Weights**: CHEST has weight of 4f in regular and sage heap distributions
* **Key Requirement**: LOCKED_CHEST and CRYSTAL_CHEST require corresponding keys
* **Mimic Chance**: Some chest spawns may be replaced by Mimics
==== JSON Configuration ====
* Level configurations that may include treasure: [[https://github.com/NYRDS/remixed-dungeon/tree/master/RemixedDungeon/src/main/assets/levelsDesc|levelsDesc/]]
* Chest contents are generated dynamically by the Generator class
==== String Resources ====
This chest is locked and you don't have a key
Chest
Crystal chest
Locked chest
==== Lua Scripts ====
This entity is implemented in Java, no Lua script exists
==== Sprite References ====
* **Chest Level Objects**:
- {{rpd:images:chest_1_level_object.png|Chest 1}}
- {{rpd:images:chest_2_level_object.png|Chest 2}}
- {{rpd:images:chest_3_level_object.png|Chest 3}}
==== Related Entities ====
* **Mimic**: [[mr:mimic_mob|mimic_mob]] - May appear instead of chest
* **Skeleton Key**: [[mr:skeleton_key_item|skeleton_key_item]] - Opens LOCKED_CHEST
* **Crystal Key**: [[mr:crystal_key_item|crystal_key_item]] - Opens CRYSTAL_CHEST
* **English Page**: [[en:rpd:chests|chests]]
* **Russian Page**: [[ru:rpd:chests|chests]]
{{tag> rpd items chests containers loot dungeon_objects}}