Maybe instead of guard, you could add "defense" to bosses (and enemies), which would decrease the received damage by the amount of defense, like in terraria. I think it's a solid system
Yeah I've been thinking of a few ideas like that, I did kindof want to keep the stat consistent for players and monsters, but its kind of hard when players dont have much health, and monsters have a ton of health. I'll keep thinking about it! Thanks for the suggestion!
Yeah I built my dungeon room editor from scratch. At one point I was using LDTK but I switched over when I was wanting a few extra features that were specific to my game. Overall its nice to have but a bit annoying to maintain sometimes.
Thanks! If you search online Go has some pretty detailed instructions on how to build to wasm (You basically just set the target GOOS, IIRC). I basically just followed those. If you take a look at ebitengine (which is a pretty good gamedev lib in golang), then they also have detailed instructions on building for multiple platforms!
Thanks! Yeah it's been a fun and very learning-heavy process with lots of mistakes along the way. I just like Go so that's pretty much why I picked it. The performance loss from GC is usually not that much unless I do something super lazy like allocate a lot.
Hey @@UnitOfTimeYT, I just got done watching the video. If you wanted to scale the game further, do you think it would be worth considering spatial partitioning methods as an optimization around packet construction? Let's consider the potential benefits of a simple Grid based partitioning system. You could write a single packet for all entities located in that cell with the world state of that cell and adjacent cells. I've been wondering for a while, if this sort of optimization is worth it. Or is it better to limit bandwidth by sending to a client just the information that they need to know, like you do in the video.
Yeah I guess it's a tradeoff with how much bandwidth you want to spend to save CPU resources when building packets for clients. Maybe I should make a full video about this to go into more details, but currently I do this per each proxy connected to the main game server: 1. [Server] Calculate vision of every player (which is basically a spatial hashmap check for nearby networked colliders) 2. [Server] Construct a single packet with every entity that every player on that proxy sees (kindof the union of all the entities and their data 3. [Server] Send that uber packet to the proxy 4. [Proxy] Loop through every player in the packet and construct an individualized packet for that player 5. [Proxy] I do extra packetsize reduction by saving entity states that we've previously sent and caching those, so that we don't resend information that hasn't change 6. [Proxy] Send the individualized packet to the respective client Number 5 is one of the bigger users of CPU, but it does save a ton of bandwidth per player and lets me be less careful about adding components that don't change frequently to entities in the game (because I know they're going to be filtered out of the final packet by the proxy cache in step 5
@@UnitOfTimeYT That is a pretty clever solution, that probably scales pretty well too. | 3. [Server] Send that uber packet to the proxy | 4. [Proxy] Loop through every player in the packet and construct an individualized packet for that player | 5. [Proxy] I do extra packetsize reduction by saving entity states that we've previously sent and caching those, so that we don't resend information that hasn't change Thanks for responding! I'll continue to keep a look out for more videos!
These are a ton of fun to watch. One day I gotta hop on and try the game out. It looks like a lot of fun!
Thanks! glad you liked the video!
hes back
Maybe instead of guard, you could add "defense" to bosses (and enemies), which would decrease the received damage by the amount of defense, like in terraria. I think it's a solid system
Yeah I've been thinking of a few ideas like that, I did kindof want to keep the stat consistent for players and monsters, but its kind of hard when players dont have much health, and monsters have a ton of health. I'll keep thinking about it! Thanks for the suggestion!
Nice video! Did you have to build your dungeon level editor from scratch too?
Yeah I built my dungeon room editor from scratch. At one point I was using LDTK but I switched over when I was wanting a few extra features that were specific to my game. Overall its nice to have but a bit annoying to maintain sometimes.
It’s starting to look like a game
Thank you Jomy
Hey, I love this series as I'm also interested in doing graphics stuff in Go. How do you build to WebAssembly?
Thanks! If you search online Go has some pretty detailed instructions on how to build to wasm (You basically just set the target GOOS, IIRC). I basically just followed those. If you take a look at ebitengine (which is a pretty good gamedev lib in golang), then they also have detailed instructions on building for multiple platforms!
This is amazing and a huge inspiration for me to see something like this is possible with no game engine is there any reason you chose go?
Thanks! Yeah it's been a fun and very learning-heavy process with lots of mistakes along the way. I just like Go so that's pretty much why I picked it. The performance loss from GC is usually not that much unless I do something super lazy like allocate a lot.
Hey Unit of time, I was wondering if you could make a video on the topic of area of interest?
Hey I think I talk about it a bit here: ua-cam.com/video/7r7oUirkBhg/v-deo.html
Maybe i'll make a video in the future going into more details
Hey @@UnitOfTimeYT, I just got done watching the video. If you wanted to scale the game further, do you think it would be worth considering spatial partitioning methods as an optimization around packet construction? Let's consider the potential benefits of a simple Grid based partitioning system. You could write a single packet for all entities located in that cell with the world state of that cell and adjacent cells. I've been wondering for a while, if this sort of optimization is worth it. Or is it better to limit bandwidth by sending to a client just the information that they need to know, like you do in the video.
Yeah I guess it's a tradeoff with how much bandwidth you want to spend to save CPU resources when building packets for clients. Maybe I should make a full video about this to go into more details, but currently I do this per each proxy connected to the main game server:
1. [Server] Calculate vision of every player (which is basically a spatial hashmap check for nearby networked colliders)
2. [Server] Construct a single packet with every entity that every player on that proxy sees (kindof the union of all the entities and their data
3. [Server] Send that uber packet to the proxy
4. [Proxy] Loop through every player in the packet and construct an individualized packet for that player
5. [Proxy] I do extra packetsize reduction by saving entity states that we've previously sent and caching those, so that we don't resend information that hasn't change
6. [Proxy] Send the individualized packet to the respective client
Number 5 is one of the bigger users of CPU, but it does save a ton of bandwidth per player and lets me be less careful about adding components that don't change frequently to entities in the game (because I know they're going to be filtered out of the final packet by the proxy cache in step 5
@@UnitOfTimeYT
That is a pretty clever solution, that probably scales pretty well too.
| 3. [Server] Send that uber packet to the proxy
| 4. [Proxy] Loop through every player in the packet and construct an individualized packet for that player
| 5. [Proxy] I do extra packetsize reduction by saving entity states that we've previously sent and caching those, so that we don't resend information that hasn't change
Thanks for responding! I'll continue to keep a look out for more videos!
2:24 thats me because i cant even get good gear
umm whats up with the discord why was i banned
lol I mean I obviously I banned you because within like an hour of joining you changed your profile picture to a nazi swastica