User Tools

Site Tools


mr:barman_npc_mob

Barman NPC - Code References

Barman NPC Sprite

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

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