Skip to content

azabicki/DoomPy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 

Repository files navigation

DoomPy

:: a python gui to keep track of scores while playing Doomlings

License: MIT

Introduction

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.

+ Python

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!

= DoomPy

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.

Methods

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.

How to run it

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.

1. getting the reop

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)

2. virtual environmant

Install the virtual environment with the tool of your choice. You find a requirements.txt in the repo base folder

3. go play

Finally, run

python /path/to/DoomPy/main.py

and have fun playing Doomlings!!

further requirements

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.

Results

Depending on your OS Dark-Mode, DoomPy looks like this:

GUI

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)

Overview

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.

GUI_with_Controls

How to: Controls

  • 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
    • 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
  • 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 🙄)
      • Music Off: basic infos about the trait + effects
      • Music On: basic infos about the trait + effects
    • You can change what trait property icons will be shown in the trait pile:
      • Default: basic infos about the trait + effects
      • None: only effects
      • Full: all icons
    • Select scoring mode, i.e. how the current scores are shown:
      • Points: show all the points
      • Rank: show only the rank of the players
      • Hidden: do not show any points

How to: Scoreboard

The scoreboard shows for each player all the relevant information.

  • Dominants:
    • Stars - - indicate how many Dominant Traits are in the trait pile
  • Name:
    • Is green if player is the current first player
  • Gene Pool:
    • Shows the players current size of his/her Gene Pool
  • # of colors:
    • displays the current Color Count, as weel as the complete trait count in the trait pile
  • Total Points:
    • Depending on Settings, you will see either the Total Score, the players current Rank, or a Wildcard hiding the current standing.
  • Points by Category:
    • = Face Value
    • = Drop Points, as far as possible to calculate automatically
    • = World's End Points, as far as possible to calculate automatically
    • = MOL Points, as far as possible to calculate automatically

How to: Trait Pile

Here is an example of a trait pile, showing all (at least i hope i did not forgot any) possible situations that may happen:

Buttons

  • 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 back to the hand, or discardit

The Actual Trait Pile

  • Each Trait:
    • has an icon depicting its Color and Face Value
      • see Wild for a multi-color example
    • a vertical line separates these properties from any special effects
  • Drop Effects:
    • if a trait has a drop effects, its indicated by a Drop and a Value icon
      • see Backbiter for an example: its drop effect is worth 3 points, since Zombified is in the trait pile
    • if drop effects are based on the player's hand or the discard 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
  • 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 an Attachment icon
      • example 1: Lyonization on Dragon Heart -> Dragon Hearts drop effect is now inactive, which is shown by the Question Mark and the Èffects inactive icons
      • example 2: Nano on Mycotoxins -> Nano has a drop effect, which is now worth as much as the Hosts face value
  • 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
  • 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

Effects From Other Trait Piles

  • If you are affected by another player's traits, these effects are listed here
    • see Shiny as an example

How to: MOLs

  • simply select the desired MOL at any time
  • this way you can play with a common MOL and evaluate it immediately

Keyboard shortcuts

[!TIP] Use keyboard shortcuts!

Just selestdasdd

Discussion

  • bugs found?
  • ideas for improvement?
    • issues are the way to go