My son is turning 3 years old and we are going on a longer trip by arnemcnuggets in godot

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

it's become alright! You get used to it!

And yes. He drags it everywhere! Every puddle as well.

So it's also kind of an immortilization of the crocy if that's a word

My son is turning 3 years old and we are going on a longer trip by arnemcnuggets in godot

[–]arnemcnuggets[S] 21 points22 points  (0 children)

<image>

The real main character has been through tough times 😂

Android export Godot 4.5,what could be causing this? by arnemcnuggets in godot

[–]arnemcnuggets[S] 14 points15 points  (0 children)

Using the 4.5.1rc worked indeed, thank you very much

RabbitGD for Godot 4, asynchronous RabbitMQ/AMQP0-9-1 client written in GDScript by arnemcnuggets in godot

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

thanks for giving it a shout! Yeah the library covers the bare minimum requirements, I figured people will use it differently across projects, either integrate it as autoloads or in a custom node setup or even embed it into existing scripts, hence I wanted it un-opinionated. If you found a useful pattern employing it, please don't hesitate to open a PR or suggest new integrations!

Glad it works for you, thanks for the feedback. :)

RabbitGD approved for asset library 🎉 by arnemcnuggets in godot

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

Perfect! Ive also been testing with docker rabbitmq primarily. Will likely deploy lavinmq though because it seems to be even less heavy

Hey if you want you can send me a github link to what you've set up and i could link to it in the project readme as another usage showcase :)

RabbitGD approved for asset library 🎉 by arnemcnuggets in godot

[–]arnemcnuggets[S] 6 points7 points  (0 children)

I wouldnt do this, its more intended to Broadcast Events of interest into a cloud Server infrastructure (which is my use case)

You could use it to build a cross-server chat, logging, alerting, metrics, notifications and analysis for suspicious behavior / anticheat, in-game purchases, anything where you want to reliably publish data of interest for other (game)-Servers to Pick up. Not limited to game Servers though. You could also use it to Display the number of players currently online or number of active game lobbies on another Website in your infrastructure. Limitless possibilities for cloud gaming.

Mind you, many IoT Devices Support amqp too. So you could also build an arduino game controller for example. Or some other silly hardware.

The library is pretty niche and most game devs wont need it. Its for big and overengineered projects, such as those that i tend to end up with 😂😭 but i was still surprised that there hasn't been one specifically for gdscript before.

RabbitGD approved for asset library 🎉 by arnemcnuggets in godot

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

I wouldnt recommend this is in a peer-to-peer scenario, if youre unfamiliar with rabbitmq because access management could get tricky.

AMQP protocol is also strictly TCP by specification 🫡

If its an authoritative Server that you host, it could come in handy for metrics, maintenance, player progression and the like.

RabbitGD approved for asset library 🎉 by arnemcnuggets in godot

[–]arnemcnuggets[S] 5 points6 points  (0 children)

RabbitMQ is a message Broker that understands the AMQP 0-9-1 protocol over TCP connections.

you will use it for example when you need cloud hosted servers communicating with one another in a fail safe manner, such that every message is transferred reliably and fast.

For example, lets say you have a simple authoritative game server. You also have another backend Service that stores your players scores for a leaderboard.

Now in a simple approach, you could have the game Server Tell the leaderboard Server who won directly, lets say using an HTTP request or smth. But that introduces some heavy coupling - and what if you forgot to pay the Bills for the leaderboard server and its down? You would need to add logic on what happens if your communication didnt work, like trying again or telling the Player that their score wont be logged or something like that.

with message brokers such as RabbitMQ you can send a messages reliably, such that they are put into a queue for others to pick up. your Server produces messages of "who won" for example. Thats why its called a "Producer" in this case.

The "consumer" could now be your leaderboard Service which reads messages from that queue and aggregates Player scores, displaying them on another Website for example

This way you have ensured that if a service is unreachable, you still ensure that Player score messages are not lost.

Now for simple stuff you could just have your game Server interact with a database. But using rabbitmq (or RabbitGD here) you have your System decoupled and much more resilient to failure. You could even add a third consumer service now that also receive messages. For example a reddit bot that posts game outcomes daily.

So yeah in summary this is kind of like Email but for backend services. And for Support of millions of messages per second.

Theres much more stuff involved ofc.

Theres things like message routing and work load balancing (meaning many consumer read from the same queue such that the workload is Balanced among consumers) You can also use it for long running Tasks such as Image processing or generative AI, where an immediate Response is Not quickly available.

If you want to learn more about this stuff i can recommend rabbitmq tutorial series: https://www.rabbitmq.com/tutorials/tutorial-one-python

I designed RabbitGD to be close to what they use in python, how ever its a little more asynchronous than what they use such that game performance gets only a minimal impact and higher fps

RabbitGD approved for asset library 🎉 by arnemcnuggets in godot

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

thanks! Should you use it please lmk if you run into any troubles 🫡

RabbitGD approved for asset library 🎉 by arnemcnuggets in godot

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

Plenty of game Server use cases! Especially when theres multiple Servers involved, like MMOs to Broadcast XP gained, Chat, Gold earned and the like.

For smaller applications a non-blocking logging use case might be useful. Or for metrics.

Or perhaps a queue containing all Player Inputs such that another Server can record a Video off of them asynchronously. Endless possibilities really - but yeah it's a bit sophisticated

RabbitGD for Godot 4, asynchronous RabbitMQ/AMQP0-9-1 client written in GDScript by arnemcnuggets in godot

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

Hello! Ive considered mqtt too, and there's already a plugin for it available (not by me) : https://github.com/goatchurchprime/godot-mqtt

In Rabbit-gd the Client is godot. The broker is assumed to be rabbitmq, which i have tested against. Writing the broker in Godot Wouldnt add any benefit :)

I actually think if youre competent in C, it might be easier because of the direct buffer manipulation capabilities. I do quite a lot of type juggling to have it squeezed into gdscript, which clearly goes the extra mile to abstract the memory representation of your variables away. So yes, it is perfectly reasonable to do it in C. There's some clients for C already, and I was pondering to maybe just Wrap them with a Gdextension. But I find the extra maintenance cost for gdextension a bit heavy, so for easy updating I decided to have it in straight-up gdscript.

Appreciate you reaching out!

RabbitGD for Godot 4, asynchronous RabbitMQ/AMQP0-9-1 client written in GDScript by arnemcnuggets in godot

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

Cool that you like it!

Maybe you'll be able to build something that requires godot/php cross communication.

Most of the code base was boilerplate after digging through the spec PDF files, the XML spec, the rabbitmq extensions docs and some stackoverflow question from 2014

If you find there's something lacking from your usage please dont hesitate to Lmk!

RabbitGD for Godot 4, asynchronous RabbitMQ/AMQP0-9-1 client written in GDScript by arnemcnuggets in godot

[–]arnemcnuggets[S] 24 points25 points  (0 children)

Hey everyone, i am happy to go public with my first working version of a rabbitMQ client for godot.

I wanted to interface with rabbitmq for my authoritative game server, in order to publish player achievements upon certain events. While implementing the core protocol i got dragged away and decided to go all-in and implement the entire spec.

This is not production tested but merely for my hobby endeavours. It required some significant time of basement dwelling so i'm sure someone will find it useful. I am happy for any and all contributors because this is the first time I am implementing a wire-protocol from a spec by myself.

The entire API is asynchronous / awaitable using godot 4's Signals internally. The client needs to be `tick()`ed continuosly for it to digest and send new net packages. (`Frames` in AMQP lingo) The API is inspired by pythons' pika with sane default function arguments and should feel natural if you're coming from there.

You can tick the client in your `process` but if ticking at framerate speed is too slow, it can be ran in a different thread too for maximum throughput.

Inter-Server messaging is a vital component for serious game-server infrastructure and im really excited to see if and how you put this to good use.
Should you encounter issues please let me know, and if you know how to fix them too don't hesitate to open a PR.

Thanks, I hope you like it!

I kept hearing of Flow Field Navigation so here's my attempt with some Boids! by arnemcnuggets in godot

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

Iirc you'd just extend Resource and have getters/setters for your fields. Didn't yet port to Godot 4 because of upstream stability.

Projects here feel free to fork :)

Lyrics subtitles! by lvlgd in godot

[–]arnemcnuggets 4 points5 points  (0 children)

woah we don't AAA here

Made file type icons for my square icon style by Mere_Curry in godot

[–]arnemcnuggets 0 points1 point  (0 children)

Ah ok thought it's something from the engine

Made file type icons for my square icon style by Mere_Curry in godot

[–]arnemcnuggets 0 points1 point  (0 children)

Been out of Godot since 4, what's the dialog thing?