:: a python gui to keep track of scores while playing Doomlings
Ever since friends backed the original version on Kickstarter and the game finally arrived, we've been more than just addicted to Doomlings from the very first second. Unfortunately, we don't live too close to one another, so we only see each other every few weeks/months. But WHEN we do, it's set in stone that at least (!) one Doomlings session has to be played!
I guess anyone who knows the game knows how much you can annoy each other by stealing or swapping yet another trait from the trait pile. And sometimes you don't even want to, especially not to jeopardise the peace that has just been restored. But if it has to be done, we thought it would only be fair if the player in the lead becomes the target.
So we always tried to get a quick overview of the others' points. But with all the scoring rules, it's quite difficult to work out who's in the lead. Especially as we extended it to 4 catastrophes at some point.
After many years of MATLAB and several unsuccessful attempts to switch to Python, I finally started using Python at the end of 2023 and turned my back on MATLAB for good. And what's the best way to learn a programming language? Exactly: With an interesting project!
So it was only natural for my first python project to be a Doomlings live points counter. Consequently,
"Doomlings" + "Python" = "DoomPy"
was born. With DoomPy you can easily allocate the traits to the respective players trait piles, select catastrophes & MOLs, and thus see what the score looks like at any time.
If you take a look at my code, please keep in mind that I'm new to Python and forgive the, very likely little Pythonic, chaos.
In the past I've been coding mostly in academia, especially with MATLAB. Therefore my coding style is very procedural. I have never coded in an object-orientated way. So I'm sure that there would be a much more efficient OOP alternative, especially in this case where players/traits/MOLs/ages are predestined to be defined as a class
... but that might be a project for the future when I learn OOP.
As this is also the first time that I am sharing a Python project with the world, this also poses new challenges for me. I think (hope) it should be possible for anyone with the provided requirements.txt to set up a virtual environment in which DoomPy has to run.
Download the repository and unzip it. Or if you prefer to use the terminal, run
wget https://github.com/azabicki/DoomPy/archive/refs/heads/main.zip
or
curl -L -O https://github.com/azabicki/DoomPy/archive/refs/heads/main.zip
(see comment on curl)
Install the virtual environment with the tool of your choice. You find a requirements.txt
in the repo base folder
Finally, run
python /path/to/DoomPy/main.py
and have fun playing Doomlings!!
Display Resolution: This is a very important aspect, since the GUI takes a lot of space. Especially if you play with 4 catastrophes and many rounds. And depending on which traits are played, it may happen that the height of the trait pile is larger than the screen, making it impossible to select MOLs. With 4 players and 4 catastrophes and on a 1800 x 1200
display, we ocasionally run into problems.
Hence, if possible:
- use a higher vertical resolution as 1200 px if played with more than 3 catastrophes
- use a wider horizontal resolution as 1800 px if you play with more then 4 players.
Depending on your OS Dark-Mode, DoomPy looks like this:
The GUI consist of mainly two parts:
- the control box on the left, where you
- set some options for the next game
- deal traits from the deck to the players trait piles
- select catastrophes world's end events
- turn some options for the current on and off
- and trait piles on the right, where you
- see the players current point
- organize each player's trait pile (i.e. playing, attaching, swapping and discarding traits)
- select MOL(s)
I hope that the handling is self-explanatory. Especially if you've already played a round or two of Doomlings. But just in case, you can find more detailed explanations here.
- Game options:
- Set the amount of players, size of gene pool, amount of catastrophes & MOLs
- Name the players, but keep the correct order at the table, because some effects affects the players to your left or right
- The radiobutton to the right of the names defines the first player (name is green), it can be changed at any time during the game, and changes automatically after each catastrophe
- Click on
start game
to clear the table and restart the game
- Deck:
- Search for the name of a trait, as soon as there is only one possibility left, the cursor jumps automatically into the list
- Click on
clr
to clear the search field
- Click on
- You may also just use the [down-arrow] key or the mouse to select a trait
- Click on the name of a
player
to deal the selected trait into his/her trait pile - There are ambiguous traits in the deck and additions to the names should resolve any uncertainties:
(2)
: numbers in parenthesis show the face value(~)
: face value is variable{A}
: trait has an action(b)
,(g)
,(p)
,(r)
or(c)
: color of trait is blue, green, purple, red or colorless(WE)
: trait has a world's end effect
- Search for the name of a trait, as soon as there is only one possibility left, the cursor jumps automatically into the list
- Catastrophes & World's End:
- Every time a catastrophe is turned, select it from the dropdown box
- First player is automatically changed
- Since
Prepper
is able to choose the world's end effect, you may need to change it manually - As soon as every trait's world's end effects are resolved, click on th
GO!
button to activate the actual world's end effect
- Settings:
- As a joke, we thought it could be funny to record our own little sound-snippets of all the "quotes" on top of every trait. But until now, we only added some generic mp3's. Turn it only and be surprised 😄 (or annoyed 🙄)
- You can change what trait property icons will be shown in the trait pile:
- Select scoring mode, i.e. how the current scores are shown:
The scoreboard shows for each player all the relevant information.
- Dominants:
- Name:
- Is green if player is the current first player
- Gene Pool:
- Shows the players current size of his/her
Gene Pool
- Shows the players current size of his/her
- # of colors:
- displays the current
Color Count
, as weel as the complete trait count in the trait pile
- displays the current
- Total Points:
- Depending on
Settings
, you will see either the Total Score, the players current Rank, or a Wildcard hiding the current standing.
- Depending on
- Points by Category:
Here is an example of a trait pile, showing all (at least i hope i did not forgot any) possible situations that may happen:
- first, select any trait by the radiobutton on the left (with exception of dominant traits and attachments)
- then, decide if you wnat to
move
this trait to another players trait pile, put it backto the hand
, ordiscard
it
- Each Trait:
- has an icon depicting its
Color
andFace Value
- see
Wild
for a multi-color example
- see
- a vertical line separates these properties from any special effects
- has an icon depicting its
- Drop Effects:
- if a trait has a drop effects, its indicated by a
Drop
and aValue
icon- see
Backbiter
for an example: its drop effect is worth 3 points, sinceZombified
is in the trait pile
- see
- if drop effects are based on the
player's hand
or thediscard pile
, they cannot be calculated automatically and need to be set manually- this is only possible once
World's End
has been played - see
Serrated Teeth
as an example
- this is only possible once
- if a trait has a drop effects, its indicated by a
- Attachments:
- are indicated by an
Attachment
icon instead of the radiobutton on the left side (it cannot be discarded by its own) - select the
Host
in the drop-down menu, which is then also marked by anAttachment
icon- example 1:
Lyonization
onDragon Heart
->Dragon Heart
s drop effect is now inactive, which is shown by theQuestion Mark
and theÈffects inactive
icons - example 2:
Nano
onMycotoxins
->Nano
has a drop effect, which is now worth as much as theHost
s face value
- example 1:
- are indicated by an
- Dominant Traits:
- are indicated by a
Dominant
icon instead of the radiobutton on the left side (it cannot be discarded by its own), and a different font style
- are indicated by a
- World's End Effects:
- if a trait has a world's end effect which needs to be decided by the player, a dropdown-box is shown
- this is only possible after the last catastrophe happens
- see
Viral
for an example
- If you are affected by another player's traits, these effects are listed here
- see
Shiny
as an example
- see
- simply select the desired MOL at any time
- this way you can play with a common MOL and evaluate it immediately
[!TIP] Use keyboard shortcuts!
Just selestdasdd
- bugs found?
- ideas for improvement?
- issues are the way to go