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
Setting up a session - not pretty but it works!
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
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
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 vehiclesAdd more tricks & trick modifiers (opening doors, flashing lights, hanging out windows, etc.)Rework physics/controls to be tighter & more accurateBetter models & animations- Realistic vehicle audio
Develop updated camera system with better dynamic movement for tricksRefactor the project for multiplayerHave 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 & buildingthe first level (LATC) - Implement a
better performingtraffic 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
Tristan Cole's Pro Driver
Imagine Crazy Taxi & THPS had a baby...
Status | In development |
Author | elocnat |
Genre | Racing, Action, Sports |
Tags | Arcade, Driving, Fast-Paced, Multiplayer, Music, Skating, Unreal Engine |
Languages | English |
Accessibility | Interactive tutorial |
More posts
- Wallriding - TCPD Patch Build (#11.1)!Nov 08, 2023
- Glowing burnouts - TCPD Update #11!Oct 25, 2023
- Districts - TCPD Update #10!Sep 12, 2023
- #IndieRacersFestival 2023 build is live!Sep 01, 2023
- Checkpoint - TCPD Update #9!Jul 31, 2023
- What's new, what's next? - TCPD Update #8!Jun 11, 2023
- Sliding into the alpha phase - TCPD Update #7!Sep 06, 2022
- #IndieRacersFestival build is live!Aug 26, 2022
- TCPD Pre-Alpha Update #6! Grinding & driving upgrades + level changes!Sep 28, 2021
- Marketing considerations & a repaved roadmap -- Devlog #10!Sep 20, 2021
Leave a comment
Log in with itch.io to leave a comment.