Online Co-op Gameplay Footage
Getting Ready for Steam
Hello! What's been happening this year? Lots of coding! Some new enemies and weapons! Merchants! Room modifiers! Also moved house.
There's online co-op now, and it's working! Server testing and deployment is streamlined. Steam builds and mobile builds are streamlined. Things are coming along.
I've also posted an annoucement on Steam regarding a Steam Early Access roadmap. Click here to read. I'm hoping to open the doors to Early Access in March 2019.
For now, please enjoy a glimpse below at some of the new stuff that's been added over the past few months.
Level Up Rewards
To be notified when Tallowmere 2 is ready for sale on Steam Early Access:
Past two months have largely been spent working on networking.
Got to the point where I can have a server sitting in the cloud, then someone starts their game client and goes through the setup to start hosting a game (or create a pre-game lobby anyway), and adjust their game's settings as needed.
But internally, I've come to a decision that I need to have all my game's data be largely stored in a flat relational-database-esque structure, rather than object-oriented hierarchies.
Each thing in the game needs a netID number. Sometimes creatures need to know who their parent creature is (if they're a minion). If there's a master creature, it needs to know who their minions are.
Further example, inventory items likely belong to a parent inventory. A creature could have an inventory, or a treasure chest could have an inventory, or a bag inside a bag could have an inventory. So when it comes to a server action such as, "Sell item with netID X" or "Enchant item with netID X", the server and/or clients needs a quick way to find said item when it receives the packet message.
So I have been working on refactoring things into a database-like storage structure, with netIDs as keys, and basic classes as the content. For parents and children, netIDs are stored rather than direct references to each class. Each instance of a class is stored in its own Dictionary, akin to a database table. A netID tracker tracks which netIDs are in use, and frees them up when an object is destroyed.
Further with networking, as Tallowmere 2 aims to allow jolly co-op, I am giving the host and/or servers the option to allow clients to have authority over a lot of actions.
Since the gameplay largely involves using your shield at the correct time, while also wanting to ensure spamming weapon attacks and instantiating fireballs and other projectiles feels as smooth as possible, I'm working towards a model where a lot of combat decision-making is managed by each client, rather than the server. This eliminates the need for everything to be server-authenticated, and means you can play with people even if your pings are very high.
From a cost-effectiveness standpoint, not requiring the server to authorise stuff means I can have one server host multiple games with many players at once, rather than restricting one server to only allow up to 4 players at a time. As I want to support desktop, mobile, and consoles, I do not want to rely on one client being a host if possible (for if the host disconnects, everyone disconnects). By offering simple message-passing servers in the middle that don't do any heavy processing, said servers can easily retain game data in the event that a player disconnects, thus allowing them to reconnect and rejoin their game.
But to retain game data, the data needs to be kept in a simple format, which is why I'm refactoring things off of the heavy MonoBehaviours that Unity uses, and storing data into regular classes instead. It's a fair chunk of time and effort to shift how I'm storing things internally, but will be worth it.
2017 was a positive, productive year for Tallowmere 2's development.
A handful of enemies, weapons, and modifiers have been added, allowing for fun 2D combat. Saving and loading works, coupled with randomised rooms and seeds. Network co-op is coming along. Keyboard, controller, and touchscreen controls are in, as is support for multiple languages.
2018's initial focus will involve implementing different game modes to give the game its purpose – short Room Attack and Time Attack modes for online romps, and longer runs for single-player and couch co-op.
Still to come: NPCs, dialogue, bosses, shrines, potions, mod support, and more of everything. Before delving into these, securing the scoring methods and gameplay loops for both online and offline play needs happen. Networking is a giant task, but it's getting there. Once the gameplay is properly loopable, alpha access will become available.
Thanks for your patience and support.