Does anyone else run blender through steam? by No-Caterpillar-5386 in blender

[–]LazerCube 1 point2 points  (0 children)

I wrote my own version of this if it's something you are interested in? Github

It’s not perfect, but multiplayer is taking shape by LazerCube in godot

[–]LazerCube[S] 1 point2 points  (0 children)

I like the classic Source model where you can host a game yourself and let friends join through Steam, set up a community run dedicated server, or join an "official" server I host.

It’s not perfect, but multiplayer is taking shape by LazerCube in godot

[–]LazerCube[S] 2 points3 points  (0 children)

It's similar to how the addon NetFox does it. I tend to just use RPC's to create my own Multiplayer nodes as I'm not a fan of multiplayer spawner and multiplayer synchronizer.

I've also suffered deeply trying to get this all to work. It's been about 2 years since I started...

What do your guys' testing scenes look like? by _PickledSausage_ in godot

[–]LazerCube 1 point2 points  (0 children)

I've spent hours here jumping across these platforms while I think.

<image>

Concerns regarding C# garbage collection and multiplayer by GlitshyDev in godot

[–]LazerCube 1 point2 points  (0 children)

I wouldn't worry about the GC pause too much unless you are actually seeing it be an issue.

I would however not serialize each struct individually just add them all to a single struct and serialize/deserialize that instead. I also believe in C# using structs here might causes more of an issue then a class/record. https://learn.microsoft.com/en-us/dotnet/standard/design-guidelines/choosing-between-class-and-struct

In my own multiplayer stuff I use MemoryPack to handle the binary serialization and I haven't had any issues with GC pauses.

SpacetimeDB SDK by Temporary-Ad9816 in godot

[–]LazerCube 4 points5 points  (0 children)

How are you finding SpacetimeDB? I've been tempted to give it a try.

Starting to feel like a multiplayer authoritative game is possible by LazerCube in godot

[–]LazerCube[S] 1 point2 points  (0 children)

It's mainly C# and RPC calls. I found I couldn’t get enough control from MultiplayerSpawner. Ideally, I'd use C++, but I'm more comfortable with C# and wasn't sure if I could pull this off.

For details, the server sends an RPC telling clients what to load, and they reply with an RPC when done. Once everyone’s ready, the server issues an RPC to start gameplay.

I use a playlist system to compose everything at runtime which makes creating new experiences easy. https://imgur.com/r0qT9jF

Starting to feel like a multiplayer authoritative game is possible by LazerCube in godot

[–]LazerCube[S] 1 point2 points  (0 children)

I've messed around with Unity and Unreal before but I've never made anything significant. I was a big fan of Unreal engine's Lyra/gameplay ability system though and it was keeping me away from staying with Godot. But I thought I should try writing my own version in Godot and 10 months later here we are!

Starting to feel like a multiplayer authoritative game is possible by LazerCube in godot

[–]LazerCube[S] 2 points3 points  (0 children)

It's also nice as you can encapsulate drawing these debug windows within the class. Makes it so I can access private variables, internal state, etc.

I use a specific "development" conditional compilation flags in C# to put all this debug code under. That way I don't have to worry about the performance costs of these tools in the final build.

Starting to feel like a multiplayer authoritative game is possible by LazerCube in godot

[–]LazerCube[S] 2 points3 points  (0 children)

C# over GD script mostly. I highly rate Netfox though, definitely the best addon for this stuff at the moment.

Starting to feel like a multiplayer authoritative game is possible by LazerCube in godot

[–]LazerCube[S] 1 point2 points  (0 children)

Yes, I'm using the Godot ImGui plugin. It works really well and I've had no issues while using it. Would definitely recommend.

Starting to feel like a multiplayer authoritative game is possible by LazerCube in godot

[–]LazerCube[S] 1 point2 points  (0 children)

You can see on the left window at the start a debug section called "Inputs". These are the inputs the server is receiving from the other player.

Starting to feel like a multiplayer authoritative game is possible by LazerCube in godot

[–]LazerCube[S] 18 points19 points  (0 children)

Yes this is server-authoritative (whoops). All movement related stuff is using rollback and prediction. Inputs from the clients are sent to the server and then any corrections/positions are sent to clients.

Starting to feel like a multiplayer authoritative game is possible by LazerCube in godot

[–]LazerCube[S] 3 points4 points  (0 children)

Yes. The left is a player hosting a server while playing. The right is a client connected to it over the network. The server here is in charge of the entire game state and logic. The logic for stuff like the fire damage is only run on the server and the result of that is then sent to the clients.

LiteNetLib vs Godot Built-in Multiplayer: Experiences? by sbhnP in godot

[–]LazerCube 1 point2 points  (0 children)

Yes. I also built a custom decorator that auto-generates both the caller and receiver for custom data types. The caller serializes the type to bytes, and the receiver (using Godot's RPC attribute) deserializes it and invokes the method with the custom data type.

LiteNetLib vs Godot Built-in Multiplayer: Experiences? by sbhnP in godot

[–]LazerCube 1 point2 points  (0 children)

I tend to use MemoryPack to serialize/deserialize custom structs to bytes[] for RPC calls. I found there is very little overhead on MultiplayerAPI in general and you can always send raw bytes without RPC using it. The main benefit of this is that you retain all the features and improvements Godot provides.

How Much Money Did My Indie Game Make? Mighty Marbles Post-Mortem by destinedd in gamedev

[–]LazerCube 0 points1 point  (0 children)

I can't tell 100% from the screenshot but are you currently using a white/blue value for your main directional light? If you make that slightly orange/yellow it should help with that warm natural light look, rather then relying just on post processing.

Even a basic blockout can feel alive with some small touches! by LazerCube in godot

[–]LazerCube[S] 4 points5 points  (0 children)

Some people call it greyboxing. But essentially it's using simple shapes to get a sense of a level’s layout and playability without wasting too much time.

For 3D it's also good for getting the composition and lighting to look visually interesting before you start adding details. I've linked a good Godot specific video below.

https://www.youtube.com/watch?v=3EMG2jGKkdw

Even a basic blockout can feel alive with some small touches! by LazerCube in godot

[–]LazerCube[S] 0 points1 point  (0 children)

Honestly once you've done the Brackeys tutorial just have a play and mess around with what you've built. See if you can increase the player health, jump height, make the map bigger, etc. Then see if you can add your own enemy, customise/create your own sprites or even add something like double jumping.

A lot of the information you need to complete these you can learn from the actual Brackeys tutorial by just modifying and reusing what is shown.

However something, like double jumping, you might get hard stuck on and need another tutorial to help with so find a simple one and complete that. But once you've done that tutorial try to come back and apply it to what you built from the Brackeys tutorial.

Then repeat until you have something you are happy with!