Tiny RPG WIP Blender + Godot

Good work about the sub levels for interiors or dungeons :+1:

A small improvment if you would want to improve the third person, just try adding some smooth walk and turn instead of no transition turn character to camera direction.

About open world, as you use one big world model, there is many options to optimize :

Divide whole world model into squarre grid game object or “chuncks” sub models, and use a game manager object script managing LOD and visibility.

World chuncks around player high detail, lower detail for all others, as many LOD as you want.

To keep low budget CPU, run a chunck manager script, checking per frame (update function) one chunck and it’s LOD (simple iteration through all children “chunck” game objects).

For open world map characters, if you get lot of characters running at same time and each script performance will drop a lot, also many ways to optimize

Same as chunck manager, some “NPC world map” manager script.

Getting all your characters as child of some parent node, it’s easy to check one character per frame distance and apply optimization :

  • Far distance : not displayed, physics and script disabled
  • Long distance : Sprite displayed that could be some square part of the model that would hidden or visible when needed, physics and script disabled.
  • Medium and near distance : 3D model visible with script and physics enabled

The advantage of such managers is you optimize the number of scripts running at same time, and spawn unspawn characters dynamically.

There is many other ways to optimize, for example using spawn and unspawn characters or groups, this feets well dungeons or combat level for example.

When it’s about detailed complex characters dynamic spawn unspawn characters is used instead, because having all game characters in the open world map loaded at same time would be too big.

About using real time day night, some games use it for example to change creatures or spawn new ones or change their activity based on day time, or allow some area access only at specific day time.

Also one good feature like Zelda BOT, is the treasure chest locked and opening only when you beat all the creatures group. This could feet your game.

Thank you for your suggestions…I’ll try to respond to all of them, but that is a lot of text for an old fart :slight_smile:

  1. the character does turn smoothly when you change direction…the problem is the way I coded the smooth rotation when he goes from forward to backward or left to right …and rotation that is 180 degrees the point the character loos at intersects directly through his mesh…so it flips instead of looking smooth…I have thought about giving it an offset, but have not gotten around to it.
  2. I’m re-creating the world now and it will not be one large mesh, but each area will be it’s own mesh…this is simpler from a coding AND editing perspective to read whatever chunk I am on to get some data…sea level, name of the area, weather chances, neighboring chunks etc…this also tells me what should be set visible or when to set lod levels based on this varable changing(event, self written)
    my cpu is hardly utilized at this point…I don’t do a lot of physics or loops, I try to avoid using loops as much as possible.
  3. I iterate through my npc’s and enemies and do enable/disable some behaviors like physics, visibility etc…I do try to keep them moving since it would be strange if they were still outdoors in the middle of the night tending their crops or whatever…again, this is still quite light…the whole point of doing the sub levels is so whenever I go into a heavily populated area, like a castle or larger village, those npc’s will THEN be loaded and the overworld is just completely hidden and all the elements in it that are running scripts are paused…but I keep it in memory for load latency…it’s still not been a problem… last I looked I was using < 1 gb or vram…so I think it’s fine :slight_smile:

as far as the zelda mechanic with the chest…I agree, puzzle rooms etc…the way areas become accessible is usually done very well in the zelda series. It’s also one of the reasons I’m recreating the world…to limit movement based on ability levels…gliding being the most infamous offender. :slight_smile:

Good, chuncks and some chunks LOD manager will help to make it run smooth and more easy to manage i think.

Yes, Zelda progression is natural, at least for me, unlocking new gadgets or powers unlock new areas or previously blocked ones.
While forcing you to follow some main progression and story, and not doing only side quests.

About Glider you could limit usage by zones usingStamina bar, limiting flight time.
So max distance the character can glide would be based on level design placing different heights where you want the player can use to glide.

Or simply make some sort of wind walls, the player would deactivate as he progress and beat some boss removing some wind barrier for example.

BTW, I think you should be able to port it to Godot 4 when it will be avaible, so you’ll benefit lot better lighting using the new open world global illumination system allowing to use emissive objects for lighting also.

Yes, I follow Juan on twitter…been watching the SDFGI stuff for a few months now…and Godot 4 in general. my game doesn’t have any frame rate issues btw…I limit it to 120 fps…I get over 240 fps when I don’t…sometimes over 300. I think I’m fine on performance. I ALWAYS keep performance in mind when I code or make any asset. I don’t have any code(aside from engine code or it’s “main” derivative) that just are always running…there is always at least one check.

1 Like