Skip to content

noranguy/final_draw

Repository files navigation

The Final Draw


Imagine that you're the owner of a MAJORLY POPULAR Casino. 

You're so rich that everyone wants to steal from you. 

TODAY is your lucky day! You just managed to catch a cheater try to embezzle YOUR Casino out of **10 million dollars**. 

Now they have to play you in a game of life or death. 

__This is The Final Draw!__

Game Description

What?

We implemented a quick 2-D Card Battle Game. The game is relatively simple: kill your opponent before they kill your first! The mechanics will be explained later, but for the moment just know that it's a really quick and fun game that we wanted to implement along with motion sensing.

Why?

The reason why we wanted to make a game like this comes from our group's mutual love for tabletop games, board games, and card games. A couple of our team members were inspired by Balatro and Spit. We also thoroughly discussed adding an interesting theme for said card game since there are always an endless amount of new card games to be made.

We wanted to integrate the hardware because three of us have embedded experience, so we wanted to implement that into the game in some capacity. We used the Raspberry Pi Pico RP2040 to implement our motion sensing. This would give us a great reason to utilize the embedded skills that we have cultived over the past few years.


Workflow

  • STEP 1: Flash code into Raspberry Pi Pico in WSL
    1. Clone the Raspberry Pi Pico-SDK into WSL
    2. Set ENV var to the Pico-SDK
    3. Build Commands to create .uf2
      • cmake -S . -B build
      • cmake --build build
    4. Hold down Bootsel and plug Pico into device to enter Boot Drive
    5. Drag the .uf2 file from WSL to Pico Boot Drive to flash
  • STEP 2: Run game in Godot
  • STEP 3: Run udp.py in Windows
    1. Use Python command below to run udp.py
      • py -3.xx udp.py
        • Note: xx refers to the version of python you have installed, so if you have python 3.14, xx = 14
    2. Use command above to run the udp.py
      • Change interpreter based on installed interpreter in PATH

Game Mechanics

This game relies on IRL player movement while holding a card to perform various game mechanics. The player has to imitate that action of throwing a card and it will lead to their avatar throwing that card at the enemy. This proves consistent with the rest of the actions as they will raise their arm and tilt the card upward to defend or set the card on a level surface to heal in the game. There is also a default normal state that the player is in whenever they are not explicitly aiming to _attack, defend, or heal.

These mechanics are also linked to the special cards in the game whose attributes are shown in the table below:

Card Pros Cons Attack Stat Defense Stat Health State
Red Card - Attack Card Continuous Damage Cannot Defend 2 Hearts 0 Defense (Stuck for 2 Seconds) Wait 3 Seconds per Heart
Blue Card - Defense Card Impenetrable Defense Unable to do more than 1 move 1 Heart Nulls all Incoming Damage Wait 4 seconds per heart
Green Card - Health Card Restore Health Bad at defending while mediocre at attack ½ Hearts ½ of incoming damage Wait 2 seconds per heart

In normal mode all of the stats are normalized to an average of each of the conditions. For example, the attack damage averages out to roughly 1.5 but we rounded it to 1 to keep the spirit of discrete health! The opponent will also have the same cards available to use and the player will be able to see the one that will be used by the opponent each time before they use it. Therefore, a lot of the game's strategy relies on timing and ability to read the opponent's move.


Quick Links

If you would like to see our development process:

  • GDD
  • Video Demo
  • Devpost

Please look at the links below!

About

Swamphacks

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors