I've been using Lua coroutines for dynamic entities in Sovereign Engine. They're a very intuitive way to model complex dynamic behaviors. But how well do they scale in memory with large numbers of concurrent entities? opticfluorine.dev/posts/lua-co...
#lua #scripting #gamedev #performance
Posts by opticfluorine | Sovereign MMORPG Engine
Sovereign Engine's NPC support is now 50% complete! The integrated NPC editor together with Sovereign's powerful scripting engine will allow creators to make rich dynamic game worlds for their ORPG. Stay tuned for some demos in the near future.
#gamedev #rpg #orpg #mmorpg #indie #opensource
Screenshot of Sovereign Engine v0.6.0 showing the new day-night cycle.
Sovereign Engine v0.6.0 has been released! This release continues to add fundamental mechanics together with bugfixes and performance improvements.
Highlights include:
* Physics, jumping, and collisions
* Calendar with day/night cycle
* New Windows installer
Check it out at sovereignengine.com!
Thinking about procedural generation of large worlds... The Minecraft approach - multiple noises feeding elevation, surface decoration, biome picking, etc - is very interesting. I want to try using wavefunction collapse for tiled noise as input to a higher layer - should be interesting. #gamedev
Live now at twitch.tv/SpaceRobotArm
Streaming RPG Maker 2000!
Lua code: function on_player_entered(event) local playerEntityId = event.EntityId -- [... do usual post-login stuff ...] -- build the entity... pass in a table with a list of named components local newEntityId = entities.Build({ Parent = playerEntityId, Name = "Test Entity" }) -- entities.Build(spec) returns an entity ID on success, nil on failure util.log_info(string.format("New entity ID = %s", newEntityId)) end
Just added to the server-side scripting in Sovereign: entity creation! Pass in a table of components, get back an entity. Doesn't get simpler than that.
My to-do list of how to use this:
* Put starter packs in new players' inventories
* Spawn monsters everywhere
#gamedev #mmorpg #indiedev #lua
Screenshot of Sovereign Engine showing the names of two players above their player sprites.
Today's engine update: players are now identified with their names above their player sprite. It's a small change, but for me it's starting to make the engine feel "real". Excited to keep pushing forward!
#gamedev #mmorpg #indiedev
All of the Christmas cakes together! Which one would you choose? 🎄
#pixelart
I've been enjoying this playlist on Behavior Trees from Petter Ogren. Can anyone recommend some other good materials on behavior trees, especially scalable many-agent models?
youtube.com/playlist?lis...
#gamedev #ai #gameai #compsci
Screenshot of the Sovereign Engine resource editor. The Animated Sprites tab is selected, and the "Moving" phase for a slime sprite is displayed.
Added support for high DPI displays to Sovereign Engine! Here's a screenshot of the built-in Resource Editor using the new font and improved scaling.
In the meantime, work continues on the server-side Lua scripting engine, which is 80% complete.
#gamedev #indiedev #mmorpg
Great retrospective on the hobbyist 2D MMORPG community from the early 2000s. Lots of creativity and innovation with limited resources - fascinating work.
youtu.be/hgbjhlGDHaw?...
#gamedev #mmorpg #mirage #vb6
Those race conditions are tough to debug, but they sure feel like an accomplishment when you figure them out haha!
4/ From there it was straightforward. Inspect the barriers around the buffer update, find that the barrier scope didn't include uniform buffer operations. NVIDIA either implicitly applied a barrier or was just fast enough that it didn't happen. AMD on the other hand showed a race condition. Fun!
3/ I found out by breaking it with another bug. I made a typo that accidentally blew up the sprites to around 5x their usual size. Suddenly it was clear that it wasn't noise - it was the font atlas from the previous draw call. The texture offset in the uniform was still pointing to it - sometimes.
2/ The breakthrough came in figuring out what the flickering was. At first the sprites were small and the flicker looked like noise. Oddly, it even flickered within the same frame in Renderdoc. That's a giant red flag for a race condition or missing barrier, but what was it?
Another fun bug: all of the sprites drawn on my GUI kept flickering, but only on AMD GPUs. Never NVIDIA.
I was updating a uniform buffer for the texture offset. The graphics lib missed a barrier for uniforms. Patched library, sent a PR, works now.
And that was my intro to Vulkan.
#gamedev #bugs
Favorite bug so far: early on I ran into an issue where the engine reported the mouse was hovering over an object one space down from the cursor. Turned out the mouseover code was fine, the renderer was drawing everything off by one and the whole world needed to shift. Oops!
#gamedev #bugs
Modernizing the engine code is off to a great start - just got the server running again, but now with the built-in Dependency Injection and Serilog instead of Castle. Startup times are dramatically faster, and the code is much cleaner!
Next up, getting the client to run again.
#dotnet #gamedev
Poorly worded, but referring to the direction that interfaces are crossed in the architecture - specifically, it gives better alignment with something like Clean Architecture where dependencies only flow in one direction. Reflection-based IoC makes it easier to break that rule without thinking.
The old way of doing dependency injection: reflection-based containers that compose from the inside out at runtime. Switching to a modern outside-in container is a mental shift, but gives much cleaner architecture and better alignment with .NET source generators. Worth it.
#dotnet #ioc #programming
Taking a break from implementing the Lua scripting backend in order to eliminate some technical debt. .NET has changed a lot since I started tinkering with this project, and it's time to catch up with Generic Host and the built-in dependency injection. Big effort, but worth it.
#dotnet #gamedev
Thanks, appreciate it!
Hey, any room left to join?
Careful, this is a slippery slope that ends in writing your own OS because the stock filesystem isn't good enough...
Looks really good! Do you have different controls for placement ahead of/behind the player?
Yep, I just finished a code generator for binding Lua libraries and now all I want to do is write more code generators lol. It's addictive!
D&D Combinatorics xkcd.com/3015
“What if you just actually modeled another world, in as much detail as possible, and let players loose?” -- Raph Koster, Ultima Online's Influence
This is what inspires me. I think an open source engine, free of any commercial obligations, can achieve this. And it's fun to build a game like this!