Ɗaɳƙ Ɗoɱaiɳ: the return of Hack & Slash
npm install dankdomain- Player's Manual
- Installation
- FAQ
- Files directory structure
- Gallery
- Node.js dependency tree
---
_Read the_ Manual _to play the_ online game
>Ɗaɳƙ Ɗoɱaiɳ is the re-imagined classic Amiga bulletin board, Hack & Slash, built around a medieval role-playing atmosphere. Your character kills, steals, brawls, and jousts other PCs, NPCs, and BOTs to gain levels and fortune. Successful ventures into the deep dank dungeon are key to immortality.
Original Commodore Amiga Hack & Slash enthusiasts can visit Absinthe BBS _by Anachronist_.
---
``linux
[theflyingape@ddgame ~]$ sudo systemctl status dankdomain-portal
● dankdomain-portal.service - 🏰 Ɗaɳƙ Ɗoɱaiɳ portal service
Loaded: loaded (/etc/systemd/system/dankdomain-portal.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2023-07-08 08:30:20 EDT; 25min ago
Main PID: 1029 (DDnet)
Tasks: 11 (limit: 200)
Memory: 71.8M
CGroup: /system.slice/dankdomain-portal.service
└─1029 DDnet
Jul 08 08:41:18 ddgame DDnet[1029]: Startup BOT #1 (IMA) from Old Timers Tap → session 5668
Jul 08 08:41:18 ddgame DDnet[1029]: Classic Gate knock from remote host 119.77.138.76 → session 5666
Jul 08 08:52:26 ddgame DDnet[1029]: City Gates knocked from remote host: 100.40.9.157 (play.ddgame.us)
`
---
`mermaid
%%{init: {'theme':'dark'}}%%
stateDiagram-v2
direction TB
Local : 👤 Local Player
Local --> main : npm run play
Remote : 🌐 Remote Players
Remote --> Firewall : telnet
Remote --> Apache : https
Firewall : 🛡️ Firewall
Firewall --> tty : 1986
state "🕸️ Apache (optional)" as Apache {
state "SSL Proxy (localhost:1939)" as proxy {
state "🖧 Ɗaɳƙ Ɗoɱaiɳ portal service (DDnet)" as DDnet {
app --> tty : telnet-socket
app --> bot : timer
app --> websocket : http/ws
app --> rest : express
app --> static : express
fork: node-pty
tty --> fork
bot --> fork
websocket --> fork
fork --> main : fork
}
--
state static {
state bundle.js {
client --> animate.css
client --> xterm.js
}
assets
images
sounds
}
}
}
state "🏰 Ɗaɳƙ Ɗoɱaiɳ (DDplay)" as DDplay {
main --> lib
lib --> items
lib --> runtime
lib --> xvt
main --> sys
main --> init
init --> db
init --> pc
init --> npc
init --> player
state login <
init --> login : login id?
login --> taxman : bot or user
login --> newuser
state newuser {
email
email --> nodemailer
nodemailer --> 📧
}
state taxman {
state "💰" as taxes
taxes --> battle : refuse
taxes --> menu : paid
menu --> library
menu --> sysop
menu --> arena
menu --> dungeon
menu --> naval
menu --> party
menu --> tavern
menu --> casino
menu --> square
arena --> battle
dungeon --> battle
naval --> battle
party --> battle
tavern --> battle
casino --> taxes
square --> taxes
tavern --> taxes
state "🏦" as bank
casino --> bank : atm
square --> bank : bank
}
}
`

 _... or just press_ dot (.) _on your keyboard_
!npm version !Libraries.io dependency status for latest release !GitHub milestones
Project development on Chrome OS and Linux with the Node.js runtime. To run a local game copy, click the VS Code icon above or manually install:
`bashfetch this package source:
$ git clone https://github.com/theflyingape/dankdomain... or via Node.js
$ npm install dankdomain
Who dares to enter my dank domain
`
NOTE: _my_ "public" _access packages are published on_ GitHub _and it requires your_ Personal Access Token authentication _to fetch/install them from this alternative_ npm registry. Read GitHub's Working with the npm registry to learn more details.
`bash`setup local Node.js package
$ npm config set @theflyingape:registry https://npm.pkg.github.com
$ npm login --scope=@theflyingape
$ npm install @theflyingape/dankdomain
... or use Docker _(convenient and uses the latest commits)_:
`linux
$ docker pull theflyingape/dankdomain
$ docker run --rm -it -p 1939:1939/tcp -p 1986:1986/tcp theflyingape/dankdomain
Dank Domain (DDnet) started on linux #661
cwd /usr/games/dankdomain/game → /usr/games/dankdomain/game/portal
initializing Deeds
initializing Online
initializing Rings (unique)
+ adding ⚛️ Atomic
+ adding ✝️ Faith
+ adding ♾️ Infinity
+ adding 🐍 Medusa's
+ adding 🕳️ Mystic Portal
+ adding 👹 Ogre
+ adding 🖤 Undying
+ adding ⚪ White Wizard
initializing Players
initializing Gangs
+ adding AB Original with BOT+NPC members
+ adding (the) Monster Mash
ENOENT: no such file or directory, open '/usr/games/dankdomain/game/etc/network.json'
→ listening on telnet 0.0.0.0:1986
→ listening on https://0.0.0.0:1939/
↔ WebSocket endpoints enabled
`
Supports running as a BBS door (as Amiga-only BBSes did for Hack & Slash in 1994) by allowing a passed user numeric ID paired with a compatible Mystic door.sys file format launched from its BBS node startup directory. Here is how to _freshly_ unit-test that app startup mode:
`bash`
[~/dankdomain]$ npm run clean
[~/dankdomain]$ cd game
[~/dankdomain/game]$ cp door-example.sys door.sys
[~/dankdomain/game]$ node main 0
For example, configure to call-out to a script with two (2) parameters: userId and the path with filename to door.sys
`bash`
#!/bin/sh
pwd; [ -s "$2" ] || exit 1
cp "$2" /usr/local/games/dankdomain/door.sys
node /usr/local/games/dankdomain/main "$1"
- What does etc/sysop.json do? How do you assign sysop privileges?
_This file simply regulates some of the game features loaded at_ runtime_. The first Player (non-NPC) to register is automatically entitled as the Ruler off the last object entry in_ files/items/title.json _which is packaged here as either the_ (M) King _or_ (F) Queen access _role. The Ruler alone is granted with minor "favor" over their domain, but aligned with the game play & spirit if not abused. Other roles can have_ sysop: true _enabled to gain access to_ "@" _and some overlapping favor with the Ruler as you'd expect from a minion._
NOTE: _in_ users _folder, edit a hidden (dot) export file to carefully modify any Player's record and save as_ save.json _whereas a running DDnet_ app.js _portal service_ (npm run net) _will automatically consume and apply it to the_ dankdomain.sql Players _table._
- What's the best way to modify Player time limits and timeouts throughout the game?
_Refer to_ files/items/title.json _for player runtime values based on their_ access _role -- assigned or achieved by reaching the next_ promote _level. There are no soft-coded values for the timeouts assigned to the various prompts. Those have been specially tweaked to keep turn-play moving along -- appropriately. That said, try modifying_ vt.defaultTimeout _seconds in_ main.js _to your liking._
For the Portal, consider downloading media packs: 📷 images and 🔉 sounds into the appropriate game/portal/static folder:
`linux`
$ pwd
/usr/games/dankdomain
.vscode Visual Studio Code: settings & debug profiles
game
etc sysop support files
files game, menu & player support files: ANSI and/or text formats
arena ASCII art & menu files
casino menu files
dungeon ASCII art
items game artifacts
library deeds & menu files
main about system & menu files
naval ASCII art & menu files
party instruction & menu files
player ASCII art
square menu files
tavern all player events logged for the day
user each player’s events logged since last visit
pcs user object type templates for BOTs, NPCs, and PCs
play game modules for each main menu item
battle.js support module for player engagements
init.js support module for initial login
runtime.json game play runtime values
sysop.js support module for the system operator - main menu "@" command
portal
static UI html/css/js using bundle.js: client.js & xterm.js
assets app install, fonts, etc.
images visual media for artifacts, creatures, and players
sounds audio media for event notifications
app.js DDnet for optional web and/or telnet services to run DDplay remotely
users player runtime database & current game files
db.js net & play module for player runtime database & files
email.js support module for (optional) dispatching email notifications
interfaces.js TypeScript object types
items.js support module for loading item artifacts & coin
lib.js support module for common I/O functions
main.js DDplay client node
npc.js support classes for BOTs & NPCs with arena, dungeon, and naval denizens
pc.js support classes for PCs with Deeds
player.js support module for common PC functions
runtime.js global runtime variables to govern play
sys.js support module with discrete functions to dependencies
telnet.js telnet client using websocket and XT emulator handling
types.js TypeScript template literals
mame player - MAME VT240 terminal + socat startup script
node_modules Node.js support libraries
package.json Node.js manifest
🇺🇸 ©️1991 - 2026 Robert Hurst
- Arena
- Connect
- Dungeon
- Images
- Monster
- Naval
- NPC
- Player
- Potion
- Ring
- Specials
- User
DDnet portal
app
- chokidar, dns, express, fs, http, https, net, node-pty, wssys
- : fs, got, path, romanize, sprintf-js, title-caseitems
- : sysdb
- : better-sqlite3, items, sysnet-keepalive
- _network service options_
- telnet: , telnet-socketurl
- web:
client
- animate.css, browserify, xterm, xterm-addon-fit, xterm-addon-unicode11, xterm-addon-web-links, xterm-addon-webgl
DDplay game
main
- sys: country-flag-emoji, fs, fast-geoip got, path, romanize, sprintf-js, title-caselib
- : items, runtime, sys, xvtitems
- : sysruntime
- : sysinit
- : db, items, lib, npc, pc, player, runtime, sysdb
- : better-sqlite3, items, syspc
- : db, items, lib, runtime, sysnpc
- : db, items, lib, pc, runtime, sysplayer
- : db, items, lib, npc, pc, runtime, sysemail
- : db, items, lib, nodemailer, nodemailer-smtp-transport, pc, runtime, sysnewuser
- : db, email, init, items, lib, pc, runtime, systaxman
- : db, items, lib, pc, player, runtime, sysbattle
- : db, items, lib, npc, pc, player, runtime, sysmenu
- : battle, db, items, lib, npc, pc, player, runtime, sysarena
- : battle, db, items, lib, npc, pc, player, runtime, syscasino
- : db, items, lib, npc, pc, player, runtime, sysdungeon
- : battle, db, items, lib, npc, pc, player, runtime, syslibrary
- : db, items, lib, npc, pc, runtime, sysnaval
- : battle, db, items, lib, npc, pc, player, runtime, sysparty
- : battle, db, items, lib, npc, pc, player, runtime, syssquare
- : battle, db, items, lib, npc, pc, player, runtime, syssysop
- : battle, db, dungeon, email, lib, pc, player, runtime, systavern`: battle, db, items, lib, npc, pc, player, runtime, sys, taxman
-