My current progress
Game client (frontend)
Implemented with Godot. This is also my first time using Godot and so far I am liking it. It felt much more streamlined and lightweight than Unity. I like GDScript too. It isn't hard to gain momentum with it.
Before I settled on Godot, I tried Love2d and Bevy. I didn't pick Love2d because Love2d is too low-level and lacks a lot of features I need, and I don't want Lua for OOP heavy stuff. I didn't pick Bevy because I was constantly hitting roadblocks with it. I feel like one would have to first be familiar with the wgpu crate before using Bevy.
The reason I tried Love2d was all because of Balatro. I absolutely love its animation and sound effects.
Screenshot of Balatro
I semi-replicated the animation logic of Balatro's card hovering, dragging effects:
Screenshot of the card hovering, dragging effects
Game server (backend)
So far I have implemented the following:
- Auth logic: user registration, login, authorization
- Game room management: create as host, join as guest, leave, kick guest, list all rooms, etc.
- Websocket / long-polling protocol for real-time communication between the client and the server. This is facilitated by Socket.io. If this teamclouday/GodotSocketIO repo works, then it could save me the hassle of implementing the Socket.io Godot client myself.
- Tests - for the above
- Game logic: Work-in-progress - This is the part I am working on. I haven't settled on the core game logic yet. But I want it to be a TCG (Trading Card Game) with less-than-usual unobservable information. I will go over this in details below.
Screenshot of the game server code
Screenshot of test suite passing
Game design
As I said, I want a TCG (Trading Card Game) with less-than-usual unobservable information. I want the players to be in-control of the game state. Some of the more well-known TCGs includes Magic the Gathering and Hearthstone. I was also a TCG player. I quitted ultimately because I didn't find them to be challenging enough. Here are some of the things I really dislike about the TCGs that I have played before:
- Players have to learn the "meta"
- Too many random elements / luck-based (e.g. rolling dice)
- Always an obvious best action that a player can take given a certain game state (makes the game super boring and predictable)
- Narrow meta - I wish players could always find their own unique strategies and gain success from them.