Advertisement · 728 × 90

Posts by opticfluorine | Sovereign MMORPG Engine

Memory Overhead of Lua Coroutines Lately I’ve been working on adding NPCs to Sovereign Engine. Sovereign uses Lua 5.4 for server-side scripting, and after playing around with behavior scripts for a while, I’ve settled on a design I li...

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

7 months ago 13 4 0 0

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

9 months ago 7 2 0 0
Screenshot of Sovereign Engine v0.6.0 showing the new day-night cycle.

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!

10 months ago 2 0 0 0

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

1 year ago 11 3 0 0
Post image
1 year ago 104 37 3 0
Post image

Live now at twitch.tv/SpaceRobotArm

Streaming RPG Maker 2000!

1 year ago 28 7 1 0
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

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

1 year ago 7 1 0 0
Screenshot of Sovereign Engine showing the names of two players above their player sprites.

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

1 year ago 9 2 0 0
Post image

All of the Christmas cakes together! Which one would you choose? 🎄

#pixelart

1 year ago 47 11 2 0
Advertisement
Preview
Introduction to Behavior Trees - YouTube This is a series of lectures on Behavior Trees, a hierarchical modular way of combining control policies for AI and robotics.

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

1 year ago 6 0 0 0
Screenshot of the Sovereign Engine resource editor. The Animated Sprites tab is selected, and the "Moving" phase for a slime sprite is displayed.

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

1 year ago 10 2 0 0
Mirage Source - A Look Through History [Part 1]
Mirage Source - A Look Through History [Part 1] YouTube video by Mirage Gaming

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

1 year ago 5 1 0 0

Those race conditions are tough to debug, but they sure feel like an accomplishment when you figure them out haha!

1 year ago 1 0 0 0

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!

1 year ago 0 0 0 0

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.

1 year ago 1 0 1 0

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?

1 year ago 0 0 1 0

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

1 year ago 25 3 3 0
Advertisement

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

1 year ago 11 2 0 0

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

1 year ago 5 0 0 0

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.

1 year ago 1 0 0 0

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

1 year ago 4 0 1 0

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

1 year ago 4 0 0 0

Thanks, appreciate it!

1 year ago 0 0 0 0

Hey, any room left to join?

1 year ago 1 0 1 0
Advertisement

Careful, this is a slippery slope that ends in writing your own OS because the stock filesystem isn't good enough...

1 year ago 0 0 1 0
Post image
1 year ago 59519 15184 683 499

Looks really good! Do you have different controls for placement ahead of/behind the player?

1 year ago 1 0 1 0

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!

1 year ago 1 0 1 0
Post image

D&D Combinatorics xkcd.com/3015

1 year ago 26844 2154 201 109

“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!

1 year ago 5 0 0 0