DeSS (Deck Simulation Software) is a simple interactive program aimed for game and deck designers. I have mainly written it to help myself in developing games like Lords of Hell, but as it can be an useful tool for other people too I decided to release it. It can be used to test various starting deals, to see how multiple players making tablings would change the deck composition and how often in practise does certain combinations come up by, without need for messing around with all those pieces of cardboard and table room.
See download part for license etc.
Latest release includes following features:
DeSS does not:
Well, a screenshot from basic command line program? But here we go... (I have bolded the user input, just to make it stand out)
1> a1,3 Tabling juggernauts, forced agreement (played) Discarding juggernauts Drawing fiends, night fiends, soul stones Turn 1 Deck: 74 cards, discard: 2 cards Table cards: 1 High Palace of Hell ---------------------------------------------------- Player 2, Mammon: Hand cards: 1 Baalzebub PO 4 Mammon favor 7 Mammon favor 10 world war 2 Baalzebub PO 5 Mammon favor 8 Mammon favor 3 Glasya PO 6 Mammon favor 9 Mammon favor Tabled cards: 1 Frozen Ocean Drawn cards: 1 fiends 2 night fiends 3 soul stones 2>
DeSS is far from finished. Here is a list of features that I plan to add or what have been asked to be added:
The stars after each feature are my generic impression how ready I am to do them.
This documentation (hopefully) applies to latest release.
As stated in overview, DeSS is deck simulation program. It is not a game, but a tool. It is meant for single user who is in complete control, i.e. this user can do whatever he or she wants and only uses this tool to get rid of a) finding, making or proxying appropriate cards and b) shuffling, and c) needed table space.
Cards in DeSS are handled via their index number. You can see these index numbers with list command.
Every card has type. Normally this is default type ('-') and has no impact on program. However, it is possible to give arbitrary types for the cards and this type is then used for sorting and can be used for automatic services like 'you can never table card of type X'.
DeSS defines following card piles: deck, discard, table, hand, and pool. Of these, hand is always player specific and pool always shared. Others can have shared one (index 0) and one for each player, plus possible piles out of player range.
Cards are moved between piles with move command. Generally there is not much difference between each deck type, except for mnemonical reasons.
Deck ("main deck") is the basic pile of cards, usually shared
between all players. Deck can be hidden with
gui_hide_deck so that you cannot see contents of it
(if you really want that for some reason).
Discard is like main deck, except any played card also
goes to discard pile. Like with main deck, the contents of discard
piles can be hidden with
Hand is, well, player's hand cards. Everyone has their own.
Hand cards can be hidden with
gui_hide_hand so that its
contents are only shown if the
current_player is same
as the investigated hand.
Table is either shared or player-specific (well, you can have both). You can set that certain card types cannot be tabled, only played.
Pool is special 'temporal pile' aimed for games where you do things like 'draw 3 and select one of them, discarding rest'. There is only one pool available for all players.
Whenever any pile is referenced, it means the pile of the current player (or shared one if the player has not own pile of that type), unless the command specifically targets other pile.
Just launch it from the command line, with init file as optional argument, followed with any deck file loaded before actual init file is executed (this will change in near future).
dessJust launch the program without any extra initialization.
dess poker.ini [$ARG1]Load the given init file and execute commands in it before starting the interactive command line. $ARG1 can be supplied to any load command.
As an argument to dess an init file can be given. An init file is a simple text-file consisting of lines of commands executed when the program starts. It is used to initialize simulator to whatever deck system needs to be simulated, by setting various variables to correct initial values and possibly setting useful aliases (macros).
Each line is executed like it was run from dess command line. Any empty line or line starting with hash ('#') is ignored. A typical init file could look something like this:
set max_hand_size 5 # basic useful aliases alias draw move deck,1-$0 hand alias shuffle move discard,all deck; sort deck random load plain52.deck shuffle # poker start set players 2 draw 5; next; draw 5; next
Sample real init files are provided with the program.
Deck file is a file that describes the used deck. It is a normal text file with one line for one card (or multiples of identical card). Any empty line or line starting with hash ('#') is ignored. The format for card line is:
[count] <card name> [(type)]
Count is number of these cards in the deck. If it is zero, card is ignored. Card name is anythign you desire, although very long ones are not fully shown in dess. If you have only one card of certain name and want to start its name with a number, put count as 1. Type is optional card type which can be used with certain automatic services. In addition it is used as primary sorting key. If no type is given, it is set as ('-') althought this is not normally seen anywhere.
Thus, a simple deck file looks like this:
7 white rabbit 3 wheel of fortune 10 spectator 1 100 deadly knives (s)
Sample real deck files are provided with the program.
Command interface is simple. Very simple. There is no (currently) history, command filling or any other advanced features. Just type your command and press the return. The syntax is normally:
<command> [arg1] [arg2]
Several commands can be given, separating each with semicolon
(';'). However, if any problems are encountered when executing any
command, all remaining commands in the line are not executed for
safety reasons. Thus, if you write command line
3 the second command is never executed (unless if there is an
alias for foo) (exception: when defining aliases,
everything after the alias command is included in it)
Warning: if you use several card handling commands, remember
that indexes may change between these two commands. Thus command
move hand,1 table; move hand,3 table wields
different result than
move hand,1,3 table as in
first one the source pile is shifted one step.
DeSS has (almost) minimal set of commands
to handle card piles and manipulate program flow To counter this,
a powerful alias command is supplied. All commands are
automatically completed, i.e. you do not have to write quit
as q is (normally) sufficient. This can be turned off by
gui_command_completion to zero.
In addition, if the command is followed by any number, you can omit
the space between the command and the number.
You can also preceed the command with question mark ('?') just to
show what it is expanded to and what is the format. Use asterisk ('*')
at the start of the command to suppress output of that command, as
echo would be set to zero.
If you call this command without commands to alias, just show that alias. If no key is given either, show all currently defined aliases.
See following chapter for alias magicks.
strict_rangesis set. The player can also be set as 'all' (or 'others') in which case command is executed once for each player (or once for all but current player) (only either target or source pile can have 'all' or 'others' players)
It is very handy to define aliases for normal actions like table, discard or draw. See supplied init files and alias magicks chapter, below.
current_playerto next one. Add one to
turnif it is first player's turn again.
gui_variable_completionis set (default). If no value given, show the current value. If no variable is given either, list all variables with their current values.
As the basic command set is very limited you most probably want to define lots of useful aliases. Some tips and guidelines:
move deck,#$0 hand
*move discard,all deck; sort deck random(the asterisk is to suppress output of move)
sort $0,hand random; move $0,hand,#$1 discard
See supplied sample init files for further alias tricks (plus some other tricks like how to simulate multiple shared decks)
You get a full list of variables by typing set in the program. Any 'boolean' type variable is 'false' when set to 0, or works otherwise.
current_playeris same as the hand owner
Some new perl (yeah this really has not been tested in any other machine than my redhat laptop which has perl v5.8.0) Then you need some text editor to edit init and deck files, and some kilobytes of free disk space for your own files (the program does not write anything to your system).
This software is free. Do whatever you want with it. No warrantly or anything exists to it. However, if used for anything big or so, I'd appreciate that tell you me about it. If you want to contribute new features, email (marjola ÄT iki.fi) or /msg me (rpr at Ircnet) instead of simply forking it, as I could find those features useful, too.
Version 1.2.2 (16.5.2003):
Version 1.2.1 (15.5.2003):
Version 1.2 (15.5.2003):
Version 1.1.1 (13.5.2003):
Version 1.1 (12.5.2003):
Version 1.0 (9.5.2003):