====== Buff System - Code References ====== ===== Core Classes ===== * [[https://github.com/NYRDS/remixed-dungeon/blob/master/RemixedDungeon/src/main/java/com/nyrds/pixeldungeon/mechanics/buffs/BuffFactory.java|BuffFactory.java]] - Central registry for all buff types, maps class names to buff classes * [[https://github.com/NYRDS/remixed-dungeon/blob/master/RemixedDungeon/src/main/java/com/watabou/pixeldungeon/actors/buffs/Buff.java|Buff.java]] - Base class for all buffs * [[https://github.com/NYRDS/remixed-dungeon/blob/master/RemixedDungeon/src/main/java/com/watabou/pixeldungeon/actors/Char.java|Char.java]] - Actor base class with buff management (buff(), hasBuff(), buffLevel(), removeBuff()) * [[https://github.com/NYRDS/remixed-dungeon/blob/master/RemixedDungeon/src/main/java/com/watabou/pixeldungeon/ui/BuffIndicator.java|BuffIndicator.java]] - Icon constants for buff display in UI ===== Key Interfaces ===== * [[https://github.com/NYRDS/remixed-dungeon/blob/master/RemixedDungeon/src/main/java/com/watabou/pixeldungeon/actors/hero/Doom.java|Doom.java]] - Interface for deadly buffs that trigger special death conditions * [[https://github.com/NYRDS/remixed-dungeon/blob/master/RemixedDungeon/src/main/java/com/nyrds/pixeldungeon/mechanics/buffs/ArtifactBuff.java|ArtifactBuff.java]] - Base class for artifact-granted buffs * [[https://github.com/NYRDS/remixed-dungeon/blob/master/RemixedDungeon/src/main/java/com/nyrds/pixeldungeon/mechanics/buffs/TemporaryBuff.java|TemporaryBuff.java]] - Base class for timed buffs ===== Buff Registration ===== BuffFactory maintains a static map of buff class names to Class objects: private static final Map> buffMap = new HashMap<>(); static { // Register all buff classes buffMap.put("Bleeding", Bleeding.class); buffMap.put("Poison", Poison.class); // ... etc } Retrieving buff by name: public static Buff getBuffByName(String className) { Class buffClass = buffMap.get(className); return buffClass != null ? buffClass.newInstance() : null; } ===== Char Buff Management ===== * **buff(Class buffClass)** - Apply buff with default duration * **buff(Class buffClass, float duration)** - Apply buff with specific duration * **hasBuff(Class buffClass)** - Check if buff is present * **buffLevel(Class buffClass)** - Get number of buff stacks * **removeBuff(Class buffClass)** - Remove specific buff * **clearBuffs()** - Remove all buffs ===== Doom Buffs (Special Death) ===== Buffs implementing Doom interface: * [[mr:necrotism_buff|Necrotism]] - Spreads to nearby, kills on death * [[mr:stone_blood_buff|StoneBlood]] - Wall walking, immurement on death * [[mr:cursed_king_buff|CursedKing]] - Cursed King artifact buff * [[mr:lich_essence_buff|LichEssence]] - Lich transformation buff ===== Artifact Buffs ===== Buffs granted by artifacts (implement ArtifactBuff): * [[mr:stone_blood_buff|StoneBlood]] - Ring of Stone Walking * [[mr:lich_essence_buff|LichEssence]] - Lich artifact * [[mr:cursed_king_buff|CursedKing]] - Cursed King artifact * [[mr:abyssal_presence_buff|AbyssalPresence]] - Abyssal artifact ===== String Resources ===== Standard string naming pattern for buffs: * `{BuffName}_Name` - Display name * `{BuffName}_Info` - Description * `{BuffName}_Death` - Death message * `ResultDescriptions_{BuffName}` - Death reason description ===== JSON Configuration ===== Most buffs are registered in BuffFactory, not configured via JSON. Some artifact buffs are configured in: * `initHeroes.json` - Starting buffs for hero classes * `levelsDesc/Bestiary.json` - Mob buff immunities ===== Related mr Pages ===== * [[mr:buff_indicator|Buff Indicator Constants]] * [[mr:doom_interface|Doom Interface]] * [[mr:artifact_buff|Artifact Buff Base Class]] * [[mr:necrotism_buff|Necrotism Buff]] * [[mr:stone_blood_buff|StoneBlood Buff]] * [[mr:bleeding_buff|Bleeding Buff]] * [[mr:poison_buff|Poison Buff]] {{tag> mr code reference buff system mechanics}}