Multiplayer & Steam wishlist progress -- Devlog #9!


This devlog was originally posted on my website:

https://elocnat.com/blogs/tcpd-devlog-9.html



šŸ”³ Multiplayer - It's Here!***


In the last devlog I mentioned that I wanted to have a single multiplayer mode (free roam) that was joinable/hostable from the main menu. Well this devlog is a few weeks late and I lied: TCPD now has both Free Ride & Trick Attack multiplayer online modes! Thereā€™s a server browser where you can search hosted lobbies and you can host your own game with up to 8 players in LATC - thereā€™s even a basic scoreboard with ping! The backend is using Epic Online Services and login works via Steam & Epic logins; Iā€™m still working on itch.io authentication. Iā€™ll dive into more detail on both the vehicle replication and EOS implementation.

*** -- Multiplayer is working but I still haven't gotten itch.io authentication working with the EOS plugin. There will be a new build & changelog posted as soon as that is working!

ā—‹ Epic Online Services Implementation

Iā€™ve never built a (working) online game before, so I was unfamiliar with any kind of online subsystem. EOS appealed to me because itā€™s free, has a bunch of services, and cross-platform support. The only problem is that itā€™s not integrated directly into UE4 - thatā€™s where the EOS Online Subsystem (and Blueprints addon) come in. Currently itch.io authentication isnā€™t working for me & the documentation is C++ focused mostly but other than that, especially with the help of the sample projects, itā€™s been really simple to get the basics up and running in my project.

The first step is obviously getting users to login. In the EOS developer portal I setup a new game, gave it the necessary security roles for hosting P2P games, and setup the projectā€™s config file with the secret values. Thereā€™s an ā€˜autologinā€™ function that I call on startup in the game instance blueprint. If this fails, users get a pop up error message when trying to access the multiplayer menu (it tries to login again first). In the editor, you can use the Developer Authentication Tool to login multiple Epic accounts for testing. I had to register another Epic account for testing purposes and then, because Epic accounts cannot be used without getting your app approved (which isnā€™t publicly available right now) or launching through the Epic Games Store, add that account to my organization in the developer portal (using a limited permissions role). Configuring Steam login was straightforward in the docs although it can only be tested by launching the packaged game or right clicking and selecting ā€˜launch gameā€™ on the project file. Authentication with itch.io isnā€™t currently working for me (and can only be tested through the itch app) so Iā€™m working with the pluginā€™s support channel to figure out why.

Subsystem login in the game instance BP

subsystem_login

Setting up a session - not pretty but it works!

session_create

Next step is getting sessions setup. All this logic is done in the game mode blueprint. Settings for the match are stored in & read from the game instance when the map is loaded and the session is created. The docs mention this, but there is one important note when creating a session: you must specify at least one setting while creating the session, even an unused one, because players cannot find a session if it doesnā€™t have at least one setting. Another thing to note is that thereā€™s currently no implementation for online ā€˜beaconsā€™ in blueprints, so player ping to other playerā€™s sessions (while searching) isnā€™t working right now to my knowledge; Iā€™ll probably have to write real C++ code for that. After the session is created, the local/current players need to be registered so that EOS knows how many active players to advertise when searching for sessions. You also need to register all incoming players from the internet (OnPostLogin works for this) and then deregister anybody who leaves the server (as well as destroy the session when the host leaves). I havenā€™t setup reconnecting to sessions yet, but thatā€™s on the TODO list in case of any crashes or network interruptions.

ā—‹ Vehicle Replication

Before, when I was testing replication, I used SmoothSync for replicating the vehicleā€™s position. That worked, but only replicated the movement; everything else was kind of broken. I figured that Iā€™d start rewriting code, moving all controls to the player controller, and replicating everything the ā€œright wayā€ -- but that quickly started to become a daunting task. So instead, I just re-enabled smooth sync and did some more testing; turns out that it works pretty well! Collision even works fine with the big collision sphere I have around the vehicle for hitting objects away.

Once I determined that SmoothSync was good enough for a first pass, I started fixing up the vehicle and player controller references. There was a lot of code (especially regarding UI & tricks registering) where I was referencing the usual ā€˜player controller 0ā€™ (if called on a listen server this is the hostā€™s controller) which ended up causing a lot of bugs. After properly fixing up those references, next up was making sure all the details of the vehicle were replicated. It would be super boring to not see your fellow drivers doing crazy tricks beside you!

Some of the basic vehicle server side/multicast calls

vehicle_server_calls

Replicating the character and body part animations was surprisingly simple. All I needed to do was send the server an event with a value from the owning client depending on the trick being performed and that would either open the body part or update the animation blueprint to use the correct character animation. After sending the server the variable, you tell the server to multicast that variable out to all clients so that everybody can see youā€™re doing a trick. Initially I had all of these set as ā€œreliableā€, but I learned that was a big nono. The thing is, the client will always see the tricks theyā€™re performing (I think), and even though tricks are a core gameplay element, other players seeing them isnā€™t absolutely required for the most part. If every event was marked as reliable and a client was lagging really badly/had very poor performance, itā€™s very possible that it will cause even more issues sending too many requests for no real reason. After getting the tricks working I focused on all the other little things like wheels turning and particle/sound effects. Turning the wheels was simple a matter of updating the steering input variable server side which is used in the lerp function to animate them. The boost and grind particles/sounds were done the same way, just set them to activate on the server and multicast to clients.

The good news is not everything had to be rewritten - there were a few functions I broke out/changed, but otherwise just having the physics client side and sending variables to the server to make changes was really easy. There are definitely better ways I couldā€™ve tackled replicating everything Iā€™m sure, but SmoothSync made the whole process so easy that I canā€™t imagine bothering to refactor everything in the vehicle code for multiplayer. My goal is not a super realistic and detailed simulation - I just want players to drive around racing and tricking in their vehicles while occasionally crashing into each other. Iā€™ve yet to test with another player and higher pings, but Iā€™m excited to see how it performs in real world testing.


That covers the basics for getting everything setup & replicated. It was a lot easier than I was expecting, granted I havenā€™t implemented anything like chat, leaderboards, lobbies/parties, etc. but those are not crucial to the core implementation I wanted to get finished. The Trick Attack mode is already setup to become a ā€˜PvP cycleā€™ style where the game modes are constantly rotating. The ā€˜free rideā€™ mode can be hosted separately as well to just drive around and have fun; eventually Iā€™ll add password protected sessions so players can host private games too.

šŸ”³ Steam - Wishlist Progress & Next Fest


I finally got my Steam page setup! You can wishlist TCPD on Steam now. Everything Iā€™ve read says that you should get your page setup as early as possible, so I decided to just go ahead and create all the basic assets myself to get the page launched and start gathering wishlists. I launched the page on July 6th and then announced it on Twitter and my YouTube page the next day. It got a few retweets and a fair amount of likes (maybe 50-60); that seemed to net me ~17 wishlists. Just for reference, that tweet currently has 13.6k impressions, 54 retweets (including mine), 101 likes, 1458 media views, and 350 engagements (22 are link clicks).

Itā€™s been a month and a week since the page launch, and Iā€™m sitting at 207 wishlists (+ 7 deletions) and 18 followers on Steam. While the wishlists are starting to pickup a little, I would be lying if I said I wasnā€™t disappointed in the numbers. I wasnā€™t expecting 1000 or anything like that, but I was hoping for 50-100 a week or close to it. Maybe that was unrealistic considering the state of the game, but considering everything I read pretty much dooms anybody who isnā€™t getting high double digits of wishlists a day and ending up with at least 10k at launch, itā€™s not exactly a great sign. Double down on the fact that itā€™s an early access game and itā€™s really not looking good for the financials of the game, kind of confirming my early suspicions about this being a niche title that probably wonā€™t sell more than a couple hundred copies (if that) at this rate.

Wishlists since page launch - Peaked 8/3 at 25

daily_wishlists_graph

On the other hand, Iā€™m not going to act like there arenā€™t potentially glaring issues that I need to sort out about the game and itā€™s marketing. Number one, Iā€™m not an artist and Iā€™m not a marketing person; thereā€™s no fancy Steam art and logo, I donā€™t think the gameā€™s description is very appealing/describes the gameā€™s purpose well enough, the Steam screenshots are kind of bland, and I know for a fact the trailer is severely lacking. I debated whether launching the Steam page at all because of these reasons, but I figured that having it available for people to wishlist was more important than getting everything perfect. I also just straight up donā€™t have budget to outsource that work right now and my thought was that it can always be improved later. Iā€™m just hoping now that I havenā€™t shot myself in the foot by releasing too early with mostly ā€˜placeholderā€™ content.

Another problem is that I just donā€™t do much advertising in general. I post on Twitter a couple times a week and occasionally on Reddit (Iā€™ve tried Imgur but apparently they hate my game), but thatā€™s it besides my YouTube channel (which probably gets an average of ~30 views per video at best anyways). This is my own fault, so Iā€™m not blaming anybody here but myself. I donā€™t want to be a YouTuber or streamer, I hate using social media in general, and hereā€™s the worst sin of all: I donā€™t want to setup and run a Discord channel. Iā€™m practically begging to fail at this point! I donā€™t like Discord personally (itā€™s a fine app and I recognize itā€™s great for gaming/gamedev) so I try to use it as little as possible. I have absolutely zero interest in running, participating in, or moderating a public chat community like that and am not willing to work with anybody unpaid/without a hired community manager to run it for me which isnā€™t in the cards right now.

Steam Next Fest starts on October 1st and runs through the 7th. Iā€™ve signed up to participate and plan to have a demo ready with at least a working tutorial, singleplayer free roam, and a couple multiplayer modes available. Iā€™ll be crunching to get a lot of quality of life fixes done like better UI/menus, smoothing out LATC, ensuring vehicle resets correctly, etc. along with trying to make the game feel a little more ā€˜appealingā€™ overall. My hope is to get the game in front of a bunch of new people and gather all the feedback (and wishlists!) I can via the Steam forums to improve it before launch. Iā€™ve never participated in any kind of Steam event, so Iā€™m not sure exactly what to expect, but Iā€™m going to try and improve the game as much as I can before then in order to take advantage of the event as best I can.

šŸ”³ Whatā€™s Next? - Development timeline update


Letā€™s update the roadmap for TCPD which I introduced in a previous devlog:

  • Rework the vehicle controller to make it feel more like a real vehicle
    • Add characters to vehicles
    • Add more tricks & trick modifiers (opening doors, flashing lights, hanging out windows, etc.)
    • Rework physics/controls to be tighter & more accurate
    • Better models & animations
    • Realistic vehicle audio
    • Develop updated camera system with better dynamic movement for tricks
  • Refactor the project for multiplayer
    • Have a single multiplayer mode todemonstrate capability
  • Work on the projectā€™s overall sound design
  • Create two original vehicles/characters that offer slightly different stats/trick sets
  • Finish designing & building the first level (LATC)
    • Implement a better performing traffic controller
    • Implement destructibles in the environment
  • Have a set of playable missions for the single player campaign
  • Implement basic AI vehicles

This devlog was a little bit late, but Iā€™m going to focus on getting the game as ready as possible for Steamā€™s Next Fest and probably wait until thatā€™s over before I end up giving another update. Iā€™ll launch a new build on itch.io when the event starts too so that way anybody who doesnā€™t want to use Steam for whatever reason can participate and hopefully find active lobbies if they want to try multiplayer. Iā€™ve got a long list of things to focus on for different areas, but the most important things in my mind are going to be a decent (skippable) tutorial, working menus/UI that properly explain game modes/objectives/controls/tricks available/etc., and molding LATC into a smaller but more detailed/polished map.

On a final note, I posted a thread on Reddit recently in r/DestroyMyGame asking for feedback, and got a lot of good feedback specifically about the gameā€™s art (which is definitely the worst part of the game right now). But apart from feedback on the game itself, one of the funniest posts was ā€œWho the fuck is Tristan Cole, and why is their name in the title?ā€. After I answered they elaborated a little bit saying they didnā€™t immediately get the THPS reference and even thought the name could even potentially come off as pretentious. I donā€™t necessarily agree with the pretentious part though I can definitely see missing the reference, but both points have been on my mind. Could the gameā€™s current name be one reason for the poor performance or reception to marketing, or is it just a red herring in the mix with all the valid points I already outlined?


Thanks for reading and following the development of TCPD!

What future game modes do you want to see? Should I change the name of the game? Let me know what you think!
Wishlist TCPD on Steam and tell all your friends to come try the demo in October during Steam Next Fest!

Follow me on Twitter for the latest news on Tristan Coleā€™s Pro Driver!

Get Tristan Cole's Pro Driver

Download NowName your own price

Leave a comment

Log in with itch.io to leave a comment.