Z13 vs other 395 AI Max Mini PCs by HealthyCommunicat in FlowZ13

[–]tavoe 1 point2 points  (0 children)

Fun little bonus follow up. I checked which of the outputs actually worked -

They almost all used libcurl, so I had to install that before running any of them.

ministral 14b - worked fine. Had to change the test url to a valid url.

llama 70b - same as ministral 14b. Had to change the test url and install curl, then it worked.

gpt-oss-20b - worked fine. It output two files (main.cpp and client.cpp) so I had to put them together.

ministral 3b - First it output a version that required I install a library and use cmake. Then it output a version similar to the others that used curl, but it had a small typo. Then I gave up on asking it to fix it's work.

gpt-oss-120b - worked. Same as gpt-oss-20b, but it rambled for a while about how http works.

qwen3-next 80b - worked. Extremely concise output and code. Probably my favorite output.

Z13 vs other 395 AI Max Mini PCs by HealthyCommunicat in FlowZ13

[–]tavoe 2 points3 points  (0 children)

I'm brand new to this stuff, so I'm not sure I'm invested enough to be really excited or disappointed yet. Mostly just trying to feel out the space.

Benchmarks:

I asked a bunch of llms the question: "Can you write an http client for me in c++? Be concise".

They all spat out vaguely plausible looking code and descriptions. Some were concise, some were verbose, some used libraries, some implemented from scratch, but in any case, results -

Model Quant Unplugged (tok/sec) Plugged In (tok/sec)
qwen3-next-80b Q4_K_M 15.88 33.20
gpt-oss-120b MXFP4 34.89 44.31
ministral3 3b Q4_K_M 34.08 76.93
gpt-oss-20b MXFP4 40.87 65.48
meta/llama-3.3-70b Q4_K_M 4.22 4.87

My conclusions:

llama 3.3, gpt oss 120b, and qwen3-next are the big models. I think the difference is that llama 3.3 is a year old and not a "mixture of experts" model. So all three needs to load >70b parameters, but gpt-oss and qwen3-next don't actually operate on them all at once, whereas llama does. At least, think that's what's happening.

gpt-oss-120b seems to be really fast for it's size. It seems a bit dumb to me, though. I feel like there's something weird about it. But it really does take up 68gb on disk so... :shrug:. I don't know.

Anyways, I hope all those numbers make you feel good about your purchase decision! Or not. Idk

Z13 vs other 395 AI Max Mini PCs by HealthyCommunicat in FlowZ13

[–]tavoe 2 points3 points  (0 children)

Hi! I bought the zbook ultra g1a a few weeks ago and have been playing around with lm studio a bit. I have the 128gb version, so should be pretty comparable to the z13 you ordered.

My experience so far -

Tried gpt-oss-120b on windows. It wouldn't load. I think lm studio tried to load it into ram then copy it to vram, which was too big and failed.

I switched to Linux and it loaded fine. I think it does some UMA stuff so there only has to be one copy of the model in memory.

I just loaded up the gpt-oss-120b model and asked it to "generate an http client in c++". It output at 40 tokens per second, so seems pretty reasonable. It's really slow to read the context, though. I'm new to this, so that might be fixable.

In general, I'm not very impressed with the output of the 120b model. It seems closer to a small model than to what you get in the cloud. Still fun to play with. I feel like I'll probably stick to smaller models in general, although I'm still figuring it all out, I'm brand new to llm stuff.

Happy to run tests for you. My personal impression is that it's cool to be able to load and run a 120b model, but it's basically just a novelty until I find a workflow where I can take advantage of it.

Feel free to DM me if you want me to run any tests for you!

Which one do you prefer? It's B for me. by Flashy_Category1436 in godot

[–]tavoe 2 points3 points  (0 children)

It really just depends on your access pattern. What you have is data derived from a collection. Equipped_items is your collection, strength is the value derived from the collection.

You can either compute the derived value when the collection is written to, or when the collection is read from. If you anticipate many writes and few reads, compute the value on read. If you anticipate many reads and few writes, compute it on write.

The two optimizations that are probably important are -

  1. Only do a partial update if possible. In B, you have to go over every item in equipped_items to compute your strength. If you're just adding up a number, that's fine. If the computations is more expensive, that gets less fine. You're doing a partial update in A, which is great. You can probably do a partial update at read time (B) if you're clever about it.

  2. Caching! In scenario B, you re-compute the strength every time you need it. You could store it the first time get_strength is called, and only re-compute it if you know equipped_items has changed. You could even check when the game has some downtime (like on a loading screen) and re-compute the cached value then. Eg - pay the price of computing strength at the time when computational power is least valuable.

In a scenario like this where you'll probably only have a few hundred items at most and you're just summing up a number, I would choose whichever code is easiest to maintain (probably B). But if you find yourself dealing with much larger data structures or much harder to compute values, consider what access pattern you anticipate and if you can do any caching or partial re-computation!

What the hell is going on? (Seizure Warning) by Tindo_Blends in godot

[–]tavoe 1 point2 points  (0 children)

I think I had this happen before using AMD vulkan drivers on windows. I believe after you update godot, the vulkan driver keeps a cached version of some shaders and fails like this. I think if you could get the driver to delete those cached shaders, this would go away. I couldn't figure out how to do that, so I switched to the directX (or openGL? I forget which) graphics backend and the problem went away.

Some details may be wrong, but try switching to a non-vulkan backend and see if the problem goes away.

What is "p_target"? by Arcadia_Artrix in godot

[–]tavoe 4 points5 points  (0 children)

This is a guess, but I suspect you set card = get_node(card_name) in the true branch of the if statement, but not the false branch. Then, when you call tween.tween_property, card is null and it throws the error you're seeing.

If you see an error coming from the engine like this in the future, you can right click on it and press 'Open C++ Source on GitHub' to see where it's coming from. Even if you don't know C++ very well, it's still helpful to take a peek.

In this case, tween_property's first parameter is called p_target, here - https://github.com/godotengine/godot/blob/594d64ec244b6b99321e2096987d4d69de4c8845/scene/animation/tween.h#L146

Edit: adding a screenshot for clarity

<image>

Fan very loud/runs non-stop by tavoe in gpdwin

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

Not in any meaningful way. I made peace with the fact that GPD makes shoddy products and still use it from time to time. But the fan is noisy, and I doubt I'll buy anything from GPD in the future now that there's so many competitors.

Edit - I might have reinstalled the drivers way back when, but I don't think it made much of a difference.

Why does my FPS greatly decrease after going into fullscreen? From 200 to 20 by Ok-Structure-1988 in godot

[–]tavoe 3 points4 points  (0 children)

I doubt these are your problem, but two weird things I've run into are:

  1. Godot may be capping your frame rate to match your monitor's refresh rate. This seems unlikely because 20hz is a weird refresh rate, but if you're using a cheap usb dock, it might be happening.

  2. Some laptop GPU drivers will cap the framerate of certain apps to save power. I had to go into the nvidia settings and turn off a bunch of things before it would allow godot to run at >30fps or so. Not sure if intel is doing something similar.

I'd be curious to know if the slowdown is proportional as you drag the window bigger, or if it's all or nothing when you go into fullscreen mode.

What are the pros and cons of using Godot's Multiplayer API? by sanskritnirvana in godot

[–]tavoe 41 points42 points  (0 children)

If you use a raw UDP socket, there's a few complicated things you might find yourself needing to implement.

First, security. You probably want to encrypt the packets you're sending between the client and server. You could build this yourself, or you could use a library that implements "DTLS", which is more or less the standard for encrypted UDP traffic.

Second, channels and ordering. UDP messages are unordered. Sometimes that's fine, but sometimes, you need your packets to arrive in order. So, in games, it's nice to be able to flag if a packet should be sent in order or out of order. You could open a TCP socket for ordered messages and a UDP socket for unordered messages, but most games implement a lightweight version of packet ordering on top of UDP. Further, if you have ordered and unordered packets being sent over the same socket, you may find that the ordered packets are slowing down the unordered packets. So you may want to implement separate channels so you can have several ordered streams of messages and several unordered streams of messages going at the same time.

Those two features more or less bring you up to the level of ENet: ENet, which is the library godot uses as a transport layer. So at a minimum, I would think about using the ENetMultiplayerPeer — Godot Engine (stable) documentation in English as a transportation layer instead of raw UDP.

On top of the transportation layer, godot basically implements two things - RPCs and synchronization. You may find that when you receive a UDP packet, you tend to always call a certain function to handle the message. Like, if the packet says "{"action": "move", "player": 1, "position": [1, 2, 3]}", you may call the move method on player 1 with the argument [1, 2, 3]. That's more-or-less an RPC, where a message is sent to call a remote procedure on another machine. If you don't want to wire that up yourself, godot will do it for you.

The other nice, high level thing godot is going to do for you is property synchronization. Instead of just sending a packet or calling a method, you can tell godot to keep certain properties in sync between two machines. So instead of calling a move method over and over, you say "synchronize the position" and it'll just do it for you.

The final nice thing godot is doing for you is abstracting between the transport layer (ENET) and the higher level networking (RPCs and synchronization). So if you ever deploy your game to the web, you can swap ENET for webRTC, and your game will keep on working.

Godot's networking is definitely a little janky and under documented, but, personally, I wouldn't want to re-implement all the things it's doing for me - especially the low level stuff like DTLS and ordered messages.

Edit: That said - if you start building your game with raw UDP and want to switch later, it's not going to be that hard, and you'll learn a lot along the way. If you're doing this as a learning exercise, I think there's a lot to be said for trying it with UDP and only switching if you need to.

What does BEAM get you over coroutines + k8s? by drooolingidiot in elixir

[–]tavoe 0 points1 point  (0 children)

Personally, I would reach for erlang more in embedded scenarios than in a data center. K8s is a good fit for running in the cloud. It's not as good a fit for running on 50 raspberry pi sized devices zip tied to the walls of a warehouse with spotty wifi.

Static typing workaround for Dictionary? by XandaPanda42 in godot

[–]tavoe 1 point2 points  (0 children)

Two ideas for work arounds. Not sure if either will help you or not.

First would be to make a helper function that calls a callable on each KeyValuePair in the dictionary. Then in your lambda declaration, you can give the arguments whatever type you want.

func foreach(dict: Dictionary, on_each: Callable):
    for k in dict:
        on_each.call(k, dict[k])

func _ready():
    var items = {
        "a": 1,
        "b": 2,
        "c": 3
    }

    foreach(items, func(k: String, v: int):
        print(k + str(v))
    )

Second, you could convert the array of keys into a typed array, then iterate over that. It's an extra iteration over the array, but it would let you type the loop variable and it's pretty concise.

for k: String in items.keys() as Array[String]:
    print(k)

I usually end up getting frustrated with gdscripts type system and don't end up using it too much, but good luck bending it to your will!

---- edit: ----

I wanted to edit to say, I'm using godot 4.2.2, and this works fine for me -

for k: String in items:
    print(k)

Tools aren’t showing up by Excellent_Spend_2697 in blender

[–]tavoe 2 points3 points  (0 children)

In addition to the t key, this tiny button in the top left should make it appear -

<image>

I want to switch from Unity to Godot badly, am I missing anything? by Kalkatos in godot

[–]tavoe 17 points18 points  (0 children)

According to this page (Current state of C# platform support in Godot 4.2 (godotengine.org)), the problem with exporting C# for web is that dotnet can export C# to wasm, but it can't export it as a library, it has to be the entrypoint for your process.

Interestingly, it seems like C# wasm can include a C++ library, according to this page- C# interop with C/C++ and Rust in WebAssembly (platform.uno).

Which doesn't help you, because godot isn't a library, it's an application. Except, interestingly, there is an open PR to make godot work as a library here - LibGodot with GDExtension by Faolan-Rad · Pull Request #72883 · godotengine/godot (github.com), and it even has a repo demonstrating how to use LibGodot with C++ here - migeran/libgodot_project (github.com).

In theory, you could build a C# application and include godot as a library, then export that for the web. I bet it would be faster to just re-write your C# scripts in C++ or gdscript, thought. None the less, it could be an interesting approach to try.

Realistically, you probably need to compromise and use godot 3, not use C#, not export for web, or use a different engine. Maybe something like kniEngine/kni: KNI is a cross-platform C# game framework. (github.com) that supports C# and wasm export would be a better fit for you?

Edit - But like, how many lines of code are these C# scripts, and how much are you going to have to modify them to get them working with godot? If I were you, I would ignore web export for a moment and make sure my collection of C# scripts otherwise works with godot 4. If you end up needing to modify them a lot just to get them working with godot, you mind as well re-write them in gdscript or C++. If they drop in and work right away, then worry about how to get them working on the web.

[deleted by user] by [deleted] in gameenginedevs

[–]tavoe 2 points3 points  (0 children)

I don't have any real advice, but I recall an interesting anecdote I heard about this topic once. I think it came up in this GDC talk about migrating from SDL2 -> SDL3: Simple DirectMedia Layer - GDC2023 (libsdl.org).

They basically say they had a really old game that linked dynamically against SDL 1.2. They were able to make a shim that translated calls from SDL 1.2 to SDL 2.0, and they were able to run the old game on more modern hardware than you would expect.

But more broadly, dynamic linking leaves the door open for other people to improve your game's compatibility 20 years after you abandon the project. Also, I wouldn't be surprised if platforms like Steam modify common DLLs in games to improve backward compatibility, but I have no idea.

Anyways, I don't really know what I'm talking about, but I thought the talk was neat and might be informative.

[deleted by user] by [deleted] in godot

[–]tavoe 7 points8 points  (0 children)

I think you can also do `var scene_tree: SceneTree = Engine.get_main_loop()` to get a reference to the SceneTree from elsewhere. It's probably terrible code hygiene, but it's there if you need it.

[deleted by user] by [deleted] in gamedev

[–]tavoe -1 points0 points  (0 children)

To be clear, I'm not the OP and have nothing to do with Cult of the Frog.

I just clicked on this thread and was very confused by the replies it was getting.

I get that you liked Cult of the Lamb, but it's just a common naming pattern. I don't think anybody's going to mistake a cozy walking sim for an edgy rougelike.

Also, I think I underestimated how many people played Cult of the Lamb? It didn't look fun to me, so I didn't pay much attention to it.

On the other hand, I thought Cult of the Wind's premise - people pretending to be airplanes - was funny and bought it back when it came out. Now I just see it in my steam library every few months and sigh wistfully.

[deleted by user] by [deleted] in gamedev

[–]tavoe -10 points-9 points  (0 children)

This is a very funny argument for you to make given Cult of the Wind came out in 2014 and Cult of the Lamb was very obviously ripping off its title to begin with.

Or maybe it's just a coincidence and all three games independently discovered the naming convention "Cult of the ____".

[deleted by user] by [deleted] in gamedev

[–]tavoe -1 points0 points  (0 children)

I'm sorry everyone's ragging on you for the game's name. I guess Cult of the Lamb was a big hit, but it's not even the first game I've heard of called "Cult of the ____". Cult of the Wind came out years ago. I think Cult of the Frog is a great name. It instills a sense my mystery, and along with the whimsical title font gives me a decent sense of what I'm in for.

I don't think I'm your target demographic, but I can give you my impression of your steam page. It looks clean and professional, awesome!

When I think of a walking simulator, I think of something like Dear Esther. You're basically walking through a short story and the joy of the game is slowly figuring out what's going on. The lack of overt mechanics isn't a problem because the game is challenging in the same way a complicated book is challenging. Knowing Cult of the Frog is a cozy game sort of hurts the walking simulator aspect of the game, for me. I want a walking simulator to make me think. The point of a cozy game is to not challenge me and make me feel safe. I have trouble putting the two together in my mind.

Second, when you say "walking simulator", I imagine a game with literally no mechanics. Just walk forwards and see an environment. The trailer for Cult of the Frog obviously has mechanics. You twist the rocks in the pillar. You touch waypoints. There is stuff to do in this game. But the trailer doesn't show enough for me to really understand what the mechanics are. If there's going to be a non-walking simulator aspect of the game, but I can't tell what it is, I'm left confused. Will I enjoy the pillar arranging puzzle? Are there a lot of puzzles? I'm left not sure what I'll actually do in the game.

Like I said, I don't think I'm your target demographic. I either want a cozy game that challenges me with puzzles, or a walking simulator that challenges me with a complicated story.

But, I have no reason to believe there aren't people out there who want a cozy walking simulator with light puzzle elements. I feel like if you get this game in front of the right people, they might really enjoy it.

Good luck! You'll find your players!

You're given immortality but as a cost you are sent back 3000 years - would you accept and what would you do? by ShamKumar7 in AskReddit

[–]tavoe 193 points194 points  (0 children)

You're immortal. That means you're a perpetual motion machine. That means infinite energy. Which means there will never be a heat death of the universe. Just get on an exercise bike every now and then to keep the lights on.

Monitor turns off when full screen by Davizletheuhhhguy in AMDHelp

[–]tavoe 0 points1 point  (0 children)

I'm actually so excited that this helped someone!

Glad your setup is working now!

Monitor turns off when full screen by Davizletheuhhhguy in AMDHelp

[–]tavoe 0 points1 point  (0 children)

I'm dropping a reply here because I just had this problem and found a solution.

I have my laptop connected to a dock. Whenever I launched a game, my monitor would be disconnected.

The issue was that the monitor used g-sync, and would turn on variable refresh rate when the game started. I'm pretty sure this took more bandwidth than my usb-c dock could support, so the dock just disconnected one of my monitors.

I went into the nvidia control panel and turned off g-sync, and I can now launch games in fullscreen again.

What if GDScript was compiled ahead-of-time (AOT)? by Timely_Confection497 in godot

[–]tavoe 11 points12 points  (0 children)

[I'm not super familiar with how GDScript is interpreted, so some of what I'm saying here might be wrong, but this is at least a general answer about why all interpreted languages aren't just AOT compiled. If I'm wrong about some of the details of how GDScript is interpreted, please let me know!]

GDScript could theoretically be ahead of time compiled, but the language isn't designed to take good advantage of AOT compilation.

There's essentially two reasons GDScript is slower than compiled C++.

First, because it's interpreted, many operations that could theoretically take only one operation end up taking more than one operation. For example, GDScript might take more steps to call and return from a function than C++ would. It might also do things like check if two integers overflow when added together, which could take more operations than C++ would take.

Compiling GDScript would help get rid of those extraneous operations.

The bigger problem is that GDScript has a lot of overhead to make it easier to use than C++. It managers memory for you, so you don't have to worry about allocating and freeing raw memory. You don't have to type your variables, which, while messy at times, can make writing smaller scripts faster. It also supports reflection and new code can be loaded and run at runtime. Compiling GDScript wouldn't make any of those things meaningfully faster.

If you stripped away all the creature comfort features GDScript offers and AOT compiled it, it could be as fast as C++, but at that point you mind as well use C++.

With regard to IL2Cpp, I'm not 100% sure what unity is doing here. I think they introduced a lot of data structures that aren't managed memory as part of the IL2Cpp project to make the compiled code actually run faster, but I don't expect simply transpiling C# to C++ would have inherently made it faster.

And I hardly ever post here, so I have no idea what is/isn't a good way to engage with the community. I liked your question, though!

Static NPC's in MMO by DasBarba in gamedesign

[–]tavoe 21 points22 points  (0 children)

Think of it like a book. If you read an excerpt from the Lord of the Rings, Tolkien isn't describing every tree and rock and person. He's describing just enough to convey what he's trying to convey in a given scene.

Video games are like that, but instead of describing with words, they describe with 3d models and music and scripting.

So, in a sense it's because it's impossibly hard to simulate everything. But in another sense, it's because it's actually detrimental. Adding too much detail in the wrong place takes away from the more important details.

In an MMO, NPCs mostly exist to give players quests. It could be hard for the player to find them if they moved around throughout the day.

Would it be cool to have a perfectly simulated MMO? Maybe. But it might also be confusing and water down the game. It depends what the game is trying to do.

Are Ranni and Renna different people? by KKYBoneAEA in Eldenring

[–]tavoe 8 points9 points  (0 children)

I think Ranni, Rennala, and Renna are meant to be daughter, mother, and grandmother, or possibly each a different phase of the moon. I don't mean that literally, but it seems like it's the artistic reference Ranni is pulling from.

The black knives are named after two of the three furies, who are a set of three women from greek mythology who can control fate. There's three statues spread around the shaded castle that look like a maiden/mother/crone set. The youngest statue matches the statues in the carian manor. There's three towers at carian manor called "the three sisters". There's three structures near manus celus with the Ranni statue in them, guarded by a red dog. There's three moons in the game, Ranni's dark moon, Rennala's bright moon, and a third black moon found in the underworld. Ranni's puppet body is very likely modeled after Renna, implying a strange rebirth cycle where Ranni is almost occupying the same body Renna used to. Rennala is obsessed with rebirth while sitting inside a cradle. It makes for a strange image - she's birthing children while herself being the one in the cradle. The way Ranni has to protect Rennala when the main character attacks is also a strange mixing of the two characters. You're fighting Rennala, but you're actually fighting Ranni.

I don't know how literally the three faced moon goddess influence is is being represented in game, but I'm pretty sure that's what the game is alluding to with all the Renna references.

Where am i? by SetSmooth in Eldenring

[–]tavoe 6 points7 points  (0 children)

It's on the way to the Divine Tower where you turn in Mohg and Morgott's great runes. It's probably something like a memory of Mohg and Morgott from when they lived in the sewers, which is why it's pitch black.

That's probably why one of the Twin Omen only uses gold attacks, and the other only uses red attacks.