mr:barman_npc_mob
Table of Contents
Barman NPC - Code References
Barman is a passive NPC in Remixed Dungeon that serves as a test/demo character for NPC functionality.
Entity Type
NPC (Non-Player Character) - JSON configuration with Lua script
Java Classes
This entity is implemented through JSON configuration with Lua script, no dedicated Java class exists. Uses standard NPC classes from:
- `com.watabou.pixeldungeon.actors.mobs.npcs.NPC` - Base NPC class
- `com.watabou.pixeldungeon.actors.Actor` - Actor system base
JSON Configuration
mobsDesc/BarmanNPC.json:
{
"baseSpeed" :0,
"spriteDesc" :"spritesDesc/BarmanNPC.json",
"scriptFile" :"scripts/npc/Barman",
"friendly" :true,
"movable" :false,
"aiState" :"Passive",
"fraction" :"NEUTRAL"
}
Configuration Breakdown:
- baseSpeed: 0 (stationary, doesn't move)
- spriteDesc: References `spritesDesc/BarmanNPC.json` for animation
- scriptFile: Uses Lua script at `scripts/npc/Barman.lua`
- friendly: true (cannot be attacked by player)
- movable: false (cannot be moved/pushed)
- aiState: Passive (no aggressive behavior)
- fraction: NEUTRAL (not aligned with any faction)
spritesDesc/BarmanNPC.json:
{
"texture" : "mobs/barman.png",
"width" : 16,
"height" : 16,
"idle" : {
"fps" : 1,
"looped" : true,
"frames" : [0, 1,0,0,1, 2,0,2]
},
"run" : {
"fps" : 8,
"looped" : true,
"frames" : [0, 1, 2]
},
"attack" : {
"fps" : 8,
"looped" : true,
"frames" : [0, 1, 2]
},
"die" : {
"fps" : 8,
"looped" : true,
"frames" : [0, 1, 2]
}
}
Animation Details:
- Texture: `mobs/barman.png` (16×16 pixels)
- Idle: 8 frames [0,1,0,0,1,2,0,2] at 1 FPS, looped
- Run: 3 frames [0,1,2] at 8 FPS, looped (not used - NPC is stationary)
- Attack: 3 frames [0,1,2] at 8 FPS, looped (not used - NPC is friendly)
- Die: 3 frames [0,1,2] at 8 FPS, looped (not used - NPC is friendly)
String Resources
English (values/strings_all.xml):
<string name="BarmanNPC_Name">Barman</string>
Russian (values-ru/strings_all.xml):
<string name="BarmanNPC_Name">Бармен</string>
Lua Scripts
scripts/npc/Barman.lua:
local RPD = require "scripts/lib/commonClasses" local mob = require"scripts/lib/mob" local dialog = function(index) if index == 0 then local hero = RPD.Dungeon.hero local pos = RPD.getXy(hero) RPD.Dungeon.hero:handle(RPD.Dungeon.level:cell(pos[1],pos[2]-3)) return end if index == 1 then RPD.glog("okay...") end end return mob.init({ interact = function(self, chr) RPD.chooseOption( dialog, "Test title", "Go back", "Yes", "No") end })
Script Functionality:
- Uses `RPD` module for game API access
- `interact` function triggers dialog when player interacts
- Dialog options:
- Option 0: Moves hero 3 tiles up from current position
- Option 1: Prints “okay…” to game log
- Demonstrates basic NPC interaction pattern for modders
Related mr Entities
- NPC System - Base NPC mechanics
- Lua Scripting - Script system documentation
- RPD API - Common classes API reference
Game Mechanics
- Purpose: Test/demo NPC for modding examples
- Interaction: Dialog-based with teleportation feature
- Location: Not naturally spawning (test NPC only)
- Behavior: Stationary, friendly, non-combatant
- Modding Use: Reference implementation for custom NPCs
Code Fragments
Example interaction pattern from Barman.lua:
-- Basic NPC interaction template return mob.init({ interact = function(self, chr) RPD.chooseOption( dialog, "Dialog Title", "Option 1", "Option 2", "Option 3") end })
See Also
- Other NPC examples in `scripts/npc/` directory
- `scripts/lib/commonClasses.lua` for RPD API reference
- `scripts/lib/mob.lua` for mob initialization
mr/barman_npc_mob.txt · Last modified: by 127.0.0.1

