I’m a dev too making a multiplayer game. Local multiplayer works phenomenally. But I’m deathly scared of when I have to add the online functionality
@GrimmDotExe6 күн бұрын
ikr ! whoever made latency is dumb :PPP
@tomweiland6 күн бұрын
Physics 🤬
@Aquarica9 күн бұрын
rip
@tomweiland6 күн бұрын
😔
@Uhfgood10 күн бұрын
I'm going to be doing the same thing here soon, but I'm not sure if I'm going to bother with youtube ads -- I might just go the patreon route (maybe merch) -- assuming I get anything popular enough for people to want to support.
@tomweiland6 күн бұрын
Yeah KZfaq ads don't pay much...unless you're getting millions of views per month it probably won't be more than some extra pocket change :P
@ronaldwoofer502410 күн бұрын
use a real engine then... its straight forward
@tomweiland6 күн бұрын
The problem described in this video is not solved by any of the major (which I'm assuming is what you mean by "real") engines though. Moving platforms in multiplayer games are not even a fully solvable problem as long as there's significant latency-at least not in a generic, one-size-fits-all approach since every "solution" requires various tradeoffs that are acceptable (or not) depending on each individual game.
@ronaldwoofer50246 күн бұрын
@@tomweiland ...its solved in unreal all of the problems described in the video... literally spend 5 minutes in the engine that soooo many ppl tell you to avoid and see just how easy it is.
@tomweiland5 күн бұрын
🤣
@ronaldwoofer50245 күн бұрын
@@tomweiland i rest my case.
@Thurtwings11 күн бұрын
it seems that i can't unzip the zip file :/
@tomweiland6 күн бұрын
Uh oh :/
@Thurtwings6 күн бұрын
@@tomweiland I should have been more specific, I can't unzip because the file is not fully downloaded, and doesn't seems to ever be. Direct download link doesn't seems to work anymore, I can't figure this out. Any idea?
@tomweiland5 күн бұрын
Have you taken a look at the pinned comment? That basically has all my suggestions for what you can try if the zip file doesn't extract.
@newbert928711 күн бұрын
Hell yeah
@tomweiland6 күн бұрын
😅
@KHADKA_OP14 күн бұрын
Bro is this for android or where to download
@tomweiland6 күн бұрын
It's not playable, and I haven't worked on the project in months due to life getting busy. Even if I one day get it to a point where it's playable, releasing on mobile is unfortunately not high on my priority list.
@BusinessWolf115 күн бұрын
I can see from the comments that you're now a servitor to the machine god, 8 hours a day. That's okay man, never think it's 'been too long' to continue your project. You will get used to it, you will upskill in certain areas, and your work, whatever it is, will help you with the game in one way or another. You've got this man! And if your priority is now a career rather than making the game, I wish you good luck on that too. But I really don't think it is. I think you and me are a lot alike, I didn't go to university for the same reasons as you. Well anyway, I've been fucking off on work hours for 15 mins now, so I'll get back to that but just know, you are not alone. There's a lot of people like you, full of passion, working 8 hours a day and MAYBE getting in half an hour every 2 days on their project. It's the consistency that counts. See you at the top.
@tomweiland14 күн бұрын
Thank you for the kind words! These are the kind of comments which make me want to come back to this project, but I'm still trying to figure out where and in what capacity it fits into my life now that I work full time 😅
@BusinessWolf115 күн бұрын
The whole selling point of indie games is that they have heart. Procedural generation is an amazing tool that often becomes a trap. People don't wanna play an algorithm, because whatever they do in it feels pointless. Doing the exact same stuff in a hand made world, however, feels much better.
@tomweiland14 күн бұрын
Agreed, I think what I may do (whenever I get back to working on this) is use proc gen to generate the shape as a starting point and then modify it by hand to fit exactly how I want it to look.
@BusinessWolf115 күн бұрын
Make the block effectiveness falloff diagetic. Meaning, make the character tilt the sword to show it.
@tomweiland14 күн бұрын
Yeah, something like that would be good 🤔
@admazzola356915 күн бұрын
you need to rethink your architecture if the boat is not working out properly. World of Warcraft did zeppelins. I am sure it wasnt easy but it is possible. 1) try doing everything in ticks 2) try doing everything in deltas with deterministic state machines
@tomweiland14 күн бұрын
It's not inherently an architecture problem-the issue of how to deal with moving platforms (which is what my boat effectively is) in multiplayer is widely-recognized as a very common problem with no real solutions that work for all scenarios. I've never played WoW so I'm not familiar with how the zeppelins work, but depending on the restrictions you place on players while on board the problem can be very easy to solve. For example, simply restricting the player's ability to get on and off the platform/zeppelin to the times where it is not moving would allow you to just sync the player's relative position with no issues (as long as it only rotates around the Y axis). Another approach is to have clients predict the position of the platform so that it exists in the same "time stream" as their local player objects, but this will then cause problems with how players see other players interacting with said platform unless you predict other players' movement as well (which is tricky business since you don't have their inputs in real time). I will probably try the platform/boat prediction method in the future, but the point is that every approach to solving this issue has downsides and tradeoffs. Which of those you're willing to make depends heavily on the game and specific use case. Simply "doing everything in ticks" (I already am) or "in deltas" doesn't solve the issues that come with objects from different "time streams" interacting.
@WilliamCutler-xh6pb15 күн бұрын
Hey thanks for this awesome tutorial. I've been working creating a multiplayer system for my game and this is the most clear and easy to use tutorial I've found. I have one problem: the MessageExtentionsUnity code seems to no longer exist on gitHub or anywhere else, and I don't know enough about coding in C# to write one by myself. Can someone help me? Edit: After hours of searching I found the code in the demo projects.
@memetech-16 күн бұрын
0:46 Minecraft camera in water is the same way
@tomweiland14 күн бұрын
And I don't like it that way :P
@Jonas-Seiler18 күн бұрын
idk seems like a skill issue
@tomweiland14 күн бұрын
🤷♂️
@Thomason100518 күн бұрын
interesting idea with syncing the player position relative to the boat, but you could skip the floating boat, just synch a parent id + relative position over the network!
@tomweiland14 күн бұрын
The problem with that is that it doesn't account for the discrepancies/delay in the boat's rotation, which would still lead to jittering/mispredictions an various situations. That's part of the reason why I went to the trouble of adding a "proxy" boat-it doesn't need to rotate so it just avoids that issue entirely.
@blue_birb18 күн бұрын
You can fix the jump when going on and off boats with a sigmoid function to interpolate between the positions
@tomweiland14 күн бұрын
Yes, interpolation would be able to hide most of the jitter in most circumstances.
@bannanafruitsalad19 күн бұрын
Man, I got into more complex programming by watching your multiplayer server series. I hope life is treating you well and that whatever you're working on nowadays is running smoothly
@tomweiland14 күн бұрын
That's great to hear! Things are going well, but unfortunately I haven't really figure out where and in what capacity this project fits into my life now that I work full time 😅
@lazicotechlinenesk19 күн бұрын
Plzzzzzzzzzzzzzzzzzzzzzzz can u make this game for mobile 🥹🫶
@tomweiland14 күн бұрын
If I ever managed to release it (I'm currently not even actively working on the project), that would honestly be one of my last priorities. I also don't think it'd play super well with touch controls-you certainly wouldn't be able to compete with someone on mouse and keyboard.
@jeffreygordon719419 күн бұрын
One complication you missed is the possibility of having a separate design team with no understanding of these issues. I learned first hand that's a silo that can kill game development.
@tomweiland14 күн бұрын
One of the perks of working alone :P
@jeffreygordon719414 күн бұрын
@@tomweiland This video was a bit of relived trauma for me. I took a contract to develop a multiplayer game from scratch during COVID after working solo for several years. It proved to me once and for all I'm best suited to working alone - no boss and no employees. I think you really captured the problem and if this video had been around I would have asked the team to watch it for a second opinion. They were often skeptical of my explanations of the difficulty of achieving their requests.
@tomweiland14 күн бұрын
I'm sorry to hear they didn't listen to you, that sucks!
@AsherKadmiel19 күн бұрын
if you weren't planning on making the game too big then you could have just used roblox though i know for the most part that it is hated among quite a few devs but that might have fixed some of your problems
@tomweiland14 күн бұрын
I am someone who has a strong dislike for Roblox 😅 I think they're a company that frequently exploits children and their passion for making games, and I have zero interest in being locked into their development ecosystem or in dealing with their predatory payout/payment withdrawal system (it's basically a scam last I checked). Plus, I highly doubt that their multiplayer system would address the issues I was working through in this video.
@realmarsastro20 күн бұрын
The older you get, and the longer you program, the more you realize most programmer memes are made by people who are new to programming. Most of the frustrations of programming come from inexperience, and kind of just go away over time.
@tomweiland14 күн бұрын
That's true to an extent, but I've seen and talked to plenty of experienced devs who don't necessarily disagree with the programmer memes, still find them funny, and who will reference/repost them too :P
@realmarsastro4 күн бұрын
@@tomweiland Oh yeah, I mean, I still like them and they're still funny. I remember how it was, lol. I just don't really experience those problems as much myself anymore.
@user-jy2zn3gz9h21 күн бұрын
Half the time is spent writing code The other half is spent finding that ONE sneaky mistake
@tomweiland14 күн бұрын
Maybe even 20%, 80% 😂
@ilikegeorgiabutiveonlybeen670521 күн бұрын
idk being a game dev and hating cheaters is like you are a developer and you deliberately choose to work developer near QA office
@tomweiland14 күн бұрын
I don't really see the connection 🤔
@ilikegeorgiabutiveonlybeen670514 күн бұрын
@@tomweiland like they test whatever vulnerabilities you have in your game and if you fix them it will make your game better. maybe they will point out how games approach to its architecture is totally wrong. e.g. king of thieves game (where you build levels to defend your gold and complete others levels to rob them). devs approach a player verifying if their level is possible to pass by making a player to pass it themselves. and the way they handle it is they let the player complete a level offline (so no lag) and record the completion. so theres a huge insentive to cheat. and as it turns out you can record whatever completion, pass it as a legit one and its very difficult to check on the server side whether whatever arbitrary completion is legit. but can you really say that only cheaters are to blame that this exists and its not the consequence of devs design choices? so if you look at this that way you can interpret cheating as kinda like qa/pentesting/whatever process
@tomweiland14 күн бұрын
Sure, having cheaters reveals exploitable vulnerabilities, but fixing said vulnerabilities is only necessary in the first place because people exist who will exploit them (aka the cheaters). Also, even if you consider something like aimbot to be exploiting a vulnerability (server trusts the client's rotation is legit), it's not really like there's much you can do about that. There's no way to verify or enforce that a client's mouse input-and by extension, player rotation-must come from a human controlling a mouse and not some third party software. Also, QA testers are trying to find issues which degrade the user experience so that you can fix them, while cheaters _actively degrade_ the user experience, so I really don't think the comparison makes sense. Even just as a player, I don't like cheaters. 99% of the time they don't have some noble intentions and either just don't care that they're ruining the experience for others, or they actually find joy in that fact. At the end of the day, the fact that people cheat slows down development (teams have to invest more resources into making things server authoritative) and is the reason many games require you to install invasive anti-cheat software. I'm not sure what's controversial about saying I don't like cheaters 😅
@ilikegeorgiabutiveonlybeen670514 күн бұрын
@@tomweiland yeah fair
@ilikegeorgiabutiveonlybeen670521 күн бұрын
2 days? more like two weeks
@tomweiland14 күн бұрын
👀
@WwZa723 күн бұрын
This is actually a great explanation why standing on a vehicle in any multiplayer game like Battlefield series was always normally fine, but when it was moving, things would go spasmatic and probably end in phasing through the vehicle or dying for no reason.
@tomweiland14 күн бұрын
Makes sense-as long as it's not moving, you don't experience the effects of objects from different "time streams" interacting. Once it moves though, 💩 hits the fan :P
@7keyz24 күн бұрын
не терпится поиграть (если конечно игру когда-то доделают)
@tomweiland14 күн бұрын
Hopefully one day, but at the moment the project is kind of on hold and I'm not quite sure when I'll get back to it :/
@merccc128 күн бұрын
Yea... They should really have network prediction features more thoroughly fleshed out in the modern engines... Such a common thing... I mean, even ue5's own visual scripting doesn't have the nodes needed for it. You have to go some roundabout 3rd party that does it for you.... That or hardcore learn C++ and do that... Have some mental issues that make visual scripting the genuine best way and C++ a nightmare...
@tomweiland14 күн бұрын
I haven't really paid much attention to Unity's Netcode for GameObjects development, but I'm assuming they have some kind of prediction/reconciliation functionality in there by now... But yeah, third parties are probably the way to go (unless you have the time and desire to write your own), but they don't usually have visual scripting support.
@creativemind4206929 күн бұрын
I miss you... We all do. I am glad you switched to godot tho and that you are porting this to it. Looking forward to the first devlog in godot.
@tomweiland14 күн бұрын
I'm assuming this is a joke lol, but just in case: I have not switched to Godot 😅 I'd like to come back to this project eventually, but I haven't really figured out where it fits in with work and other life stuff.
@creativemind4206914 күн бұрын
@@tomweiland Ya I was joking haha😅 Anyways looking forward to whatever comes next, I hope I can speak for a large part of the community if I say that you inspired a lot of us to strive for great projects. We will not forget your greatness. Good luck with anything you do🤞
@hoveringgoat8061Ай бұрын
My niave solution is to move the client position x% closer to the server position. It'll be smooth and generally not noticeable unless there's a significant difference. And since it averages the two systems (client and server) should get back in sync. This is mostly theory at this point tho.
@tomweiland14 күн бұрын
The problem is that the client is simulating ahead of the server, so if you don't correct fully then your starting point for future tick is still incorrect and will lead to larger divergences more quickly. What you _can_ do is fully correct the player's collider/state, but add a bit of delay to the visual so you can smoothly interpolate to the new position.
@thedude4039Ай бұрын
Is the game playable now? Will it ever be playable?
@tomweiland14 күн бұрын
Nope, I started working full time last year and haven't really touched this project in a while. I'd like to come back to it eventually, just not sure exactly when...
@matheolefloch3200Ай бұрын
thx
@tomweiland14 күн бұрын
👍
@MikeMcRobertsАй бұрын
I wonder why this guy stopped doing videos a year ago?
@tomweiland14 күн бұрын
I spent several months working on rebuilding the whole project and then started working full time. I'd like to come back to this eventually, just not sure exactly when...
@b3lowtoonatural524Ай бұрын
Bro why you yapping??
@tomweiland14 күн бұрын
Lmao did you click on my video expecting me to not say anything??
@Gromash26Ай бұрын
but true and sadly fun
@tomweiland14 күн бұрын
Well if it got a laugh out of you, that's a win :P
@Gromash26Ай бұрын
damn, that wasn't very motivational
@Jay-Dub-Ay20 күн бұрын
Yuh… time to go outside.
@tomweiland14 күн бұрын
😔
@vaguephoenix3512Ай бұрын
Your intro is cool
@tomweiland14 күн бұрын
You mean the scene with the water? That's from the game I was working on at the time 😅
@therealgator48562 ай бұрын
Im thinking about doing programming moving forward, what hell awaits me?
@tomweiland14 күн бұрын
Do it, just don't touch multiplayer for a while, _at least_ until you have a really solid grasp on the language, engine, and other tools you're using :P
@williamcourchane31352 ай бұрын
It doesn’t say materials under my assets. How am I suppose to follow help me lmao
@tomweiland14 күн бұрын
Then just create a folder and name it "Materials"...? My project already had it because I started from the URP template project, but none of those assets are necessary for you to follow along (for example, which skybox you use is irrelevant). If you created your project using the built in render pipeline, you wouldn't have any of the template assets.
@SoloGameDeveloper2 ай бұрын
My game just like chess game multiplplayer
@tomweiland14 күн бұрын
Ah that's much simpler :P
@cristalGamer51002 ай бұрын
Hi, I thought it would be a bad idea to run the server on unity because it could affect performance, I thought I should use console applications for my server, but maybe it doesn't make sense because I will have to write my own structure of cordinates and components?
@tomweiland14 күн бұрын
This heavily depends on what kind of game you're making. For something like a card game that doesn't need physics and can be easily represented by a few classes in your code, a console server would make more sense. However, if you need physics/collision detection, transforms, animations, etc. then running a Unity server is probably the better choice-otherwise you have to implement those things yourself, and if you don't know what you're doing you may very well end up with _worse_ performance. Another consideration is whether or not you care about preventing cheating, because if you don't you can just trust clients to calculate things on their end, and the server can be a console app which just relays data to the other clients. Or you can get rid of the dedicated server entirely and just have one of the clients also act as the server.
@cristalGamer510013 күн бұрын
@@tomweiland I came to the same conclusion when I thought about it. But still, thank you for the answer!
@sxsignal2 ай бұрын
interested in how you did they island shading as I like how you have green/dark patches on some aspects that turn flat
@tomweiland14 күн бұрын
I just take the grass and stone colors and blend them based on the angle of triangle. The steeper the slope, the more stone colored the triangle will be.
@simonbarton32952 ай бұрын
Idea for the underwater effect: close the water body mesh (add sea floor and walls). After the main pass, render this mesh with reversed face-culling and without depth testing. Add fog manually in fragment shader, based on G buffer depth. This also works for other bodies of water, including waterfalls and floating blobs of liquid.
@tomweiland14 күн бұрын
Walls would be sufficient to make it work, and it's something I considered but didn't implement yet because currently the water mesh is generated at runtime (and giving it walls would make that more complicated).
@bjarnenilsson802 ай бұрын
Well if delay was constant It wouldn't by such a pain, but since the internet has multiple opatvhs between 2 points an there are no quarantines that a packet always travels the same path, you get variations in delay (jitter), and since that can't be acutely modeled this is what create headaches for developers and rage quits for players
@tomweiland14 күн бұрын
Yes, jitter needs to be accounted for and can cause further problems, but imo the main pain point/problem causer is just that latency exists at all. If I could pick between removing all jitter and removing latency so everyone's connection jitters between 0ms and 20ms or something, I'd choose the latter in a heartbeat :P
@cloudchen08312 ай бұрын
You are a hero.
@tomweiland14 күн бұрын
😅
@ojtap2 ай бұрын
i have error at ZipFile 7:00
@tomweiland14 күн бұрын
I'm not really sure what you expect me to do about it, considering you've provided zero information about the problem other than that it exists lol 🤔
@boltthejolteon49272 ай бұрын
I am currently trying to make a multiplayer game on gm2 (matchmaking system) aaand The best way I can describe this so far is I knew what I was getting into but I didn't KNOW what I was getting into.
@tomweiland14 күн бұрын
🤣
@jumpod98532 ай бұрын
The biggest pitfall for indie devs is getting stuck in an 'editor loop' repeatedly playing the game in development mode until they lose interest. Focus on core mechanics and a playable prototype first, then refine the environment and polish later!
@tomweiland14 күн бұрын
I more-so fell into the "KZfaq trap" where making interesting videos somewhat requires things to look at least half-decent, even during development :P