dcss-api
dcss-api is an easy to use Python wrapper for Dungeon Crawl Stone Soup's (DCSS) Webtile websocket API. It supports logging in, starting a game and sending commands during game play.
Documentation
The Rust documentation for the dcss-api can be found here. The best way to start is to look at the examples in Python here. Please see the setup on GitHub in order to be able to run these examples. In depth documentation about the DCSS websocket API can also be found here.
Example
This example connects to DCSS on localhost:8080, logs in as Username, starts a random game as a minotaur berserker with a mace, moves up and then back, then quits the game and disconnects.
webtile = dcss_api.WebtilePy("ws://localhost:8080/socket", 100)
while (message := webtile.get_message()) != None:
pass
gameid = webtile.login_with_credentials("Username", "Password")
print(gameid)
while (message := webtile.get_message()) != None:
pass
webtile.start_game(gameid[0], "b", "f", "b")
while (message := webtile.get_message()) != None:
print(message)
webtile.write_key("key_dir_n")
webtile.write_key("key_dir_s")
while (message := webtile.get_message()) != None:
print(message)
webtile.quit_game()
while (message := webtile.get_message()) != None:
print(message)
webtile.disconnect()
You can also create scenarios in wizmode from a yaml file. It can create any floor layout, from any feature, and add any item or monster.
This example will create a two floor dungeon (D:1 and D:2), with a scroll and sword on the first floor (second room, past the door) and with a Kobold on the second floor.
options:
default_feature: "floor"
levels:
- level:
name: D:1
features:
- '< = exit_dungeon'
- '> = stone_stairs_down_i'
- '# = rock_wall'
- '. = floor'
- '+ = closed_door'
items:
- 'x = Scroll of identify'
map: |-
#########
#...#...#
#.<.#.x.#
#...#...#
#.@.+...#
#...#...#
#...#.>.#
#...#...#
#########
- level:
name: D:2
features:
- '< = stone_stairs_up_i'
- '# = rock_wall'
- '. = floor'
monsters:
- 'k = Kobold'
map: |-
#########
#.......#
#.<.....#
#.......#
#.......#
#.......#
#.....k.#
#.......#
#########
webtile.start_game_with_scenario is used to build the scenario in Python.
webtile = dcss_api.WebtilePy("ws://localhost:8080/socket", 100)
while (message := webtile.get_message()) != None:
pass
gameid = webtile.login_with_credentials("Username", "Password")
while (message := webtile.get_message()) != None:
pass
webtile.start_game_with_scenario("dcss-0.33", "b", "f", "b", "./examples/scenarios/readme.yaml")
while (message := webtile.get_message()) != None:
pass
webtile.disconnect()