Skip to main content

WIP: Kafejo Fora: My first public Overte world

·1652 words·8 mins
Overte Videogames
Luĉjo
Author
Luĉjo
Studanto kaj via loka esperantisto

Showcase
#

Marketing presentation

[link to all files]

Creation
#

Beginnings
#

I initially copied my LabTopia world and then decided to place objects created in Blender into it.

I started with a long search for creating realistic looking landscapes in Blender. I tried out many plugins, but in the end I decided to stick with the built in Blender Landscape ANT to create the island. I then applied textures to the surface and even neatly painted them. Unfortunately, Blender does not export procedural textures, so I decided for a patchy solution and simply bake the textures. This meant that all the textures would be placed onto one, but all the individual textures together were mere 3 MB, the baked texture was 30MB and it was not looking HD.

Picture of the baked texture

I added rocks to the surface in a similar way to how Blender Guru taught us to distribute sprinkles on a doughnut: Using geometry nodes.

Picture of me placing rocks on the surface

Then after that I modelled a building, setup the background and also imported the first animations.

and this got me wind turbines! I decided to also add sound and initially struggled a little bit, because the atp server does not support sound yet. This motivated me to move my models to Codeberg. Note at that point I was also using proprietary music, especially nighttime ambient music from Sonic Unleashed.

Picture of me placing rocks on the surface

Next up I wanted to add the sea and some ponds. How do you approach the issue? With a Blender ocean modifier and then animations? Overte doesn’t support Vertex animations, so I ultimately decided to use tricks, such as rotating discs and animation scripts.

Early build and a new beginning
#

I then couldn’t continue working on the world for a while because I was busy and I decided to restart the project for a few reasons, I was lacking clear planning and my project has already reached 100MB. When testing the world with some friends of mine, it took Overte a lot of time to load all the assets and to start playing music. It’s clear that something needs to change, so I decided to restart the project and this time follow a clear plan, clearly documented and optimised so that all assets are below 50MB. Here are the two screenshots of the old build:

Design principles
#

[50MB max, only free and CC content, all should be cited. Following project folder structure:

KafejoFora/
├── assets/
│   ├── teksturoj/
│   ├── modeloj/
│   │   ├── blender/       # .blend files (backup)
│   │   └── eksporto/      # All the .glb and .fbx files
│   └── bildoj/            # Reference images, concept art
├── programaro/            # Animation javascripts, control panels
├── sono/                  # Music and SFX sounds (CC-licensed)
├── mondo/                 # Overte world files
│   └── mondo.json         # Main world configuration
├── dokumentaro/           # Documentation, setup instructions (also in English)
└── LEGUMIN.md             # Project overview

Folders, Variable names and comments in Esperanto, but the world itself should be by default in English, including all UI elements. Other translations should be available, especially German]

Core World Foundation
#

Terrain Creation
#

I’ve created the island, beach and the mountain using Blender ANT Landscape. Each got one texture assigned to it and I took the most lightweight textures from AmbientCG. To optimise for size I decreased the subdivisions of the landscape.

Image of making the island

Next, the file had to be exported as glb, I also tried fbx, but had trouble with textures. I inserted it into the world to test its size and textures and I noticed that I needed to UV unwrap all the surfaces and scale the textures by 100 and finally in Overte the whole world had to be scaled by 100. By reducing the material image quality to 50% in the glb export options, we get to have a mondo.glb file that weighs only 4.7 MB.

Insertion of the world in various formats in Overte for testing

Add Roads
#

I spent almost an entire day trying to get the road to work. I followed this tutorial:

It was kind of fun laying down the road paths:

Insertion of the world in various formats in Overte for testing

But unfortunately I had to redraw everything because the path was somehow broken. However, I then noticed by raising the roads in the z-axis by a little that the road was twisted in 3D at the curves:

Insertion of the world in various formats in Overte for testing

This was very frustrating. However I found a solution! You could raise the road over the path and then modify the path so that the curves were less extreme. With a little bit of experimentation, I finally got the road the way I wanted! The problem was that the curves were too extreme.

Insertion of the world in various formats in Overte for testing

I thus decided to redraw the road paths and start again. Since I didn’t want to modify the texture of the island by introducing new vertices, I decided to make the road 3D with concrete cobblestone on the sides as is often seen in serpentinous roads in Central Europe. What was very time consuming was to figure out the details of the tool, because the moment I decided to make the road 3D I had to tinker a lot with the settings and finally I still had to adapt the terrain a bit to the road by sculpting it.

Insertion of the world in various formats in Overte for testing

Then I also had to add all the branching roads (for example the one linking the cafe with the main road), but there I had again issues with the tool, because I had to set the offset to Y=-1 for some reason. This took a lot of time and was a bit frustrating, but I’m finally done with roads! I hope that roads were the most challenging part of the process.

Insertion of the world in various formats in Overte for testing

Water Surfaces
#

Instead of using any kind of wave modifiers, I only created two square disks, one for the sea and the other one for the lake. I found an online source of free water normal maps. These normal maps will be used to create the impression that there are waves present. This was very quick and the files are also very lightweight, only roughly 200 kB.

Insertion of the world in various formats in Overte for testing

For the sea I used the following animation script which makes sure that waves appear (z-movement) as well as appear moving (angular motion)

```javascript
// Pseudocode for water animation
function animateWater() {
  const waterDisc = document.getElementById("sea-disc");
  waterDisc.rotation.z += 0.001; // Adjust speed as needed
}
setInterval(animateWater, 16); // ~60fps
```

This means it’s finally time to look for some models!

🏗️ Structural & Decorative Elements
#

Scatter the world with sprinkles:
#

I found awesome trees from Creazilla that together weigh less than 1 kB. I wanted to use geometry nodes and specifically followed the good old dognut tutorial to scatter the world with trees:

I created maps of probabilities where the trees can show up and tried to simulate real-world forests, pines for example growing at higher altitudes and in the north, while the south is populated by birch trees and the beaches by palm trees.

Forest maps for geometry nodes

This lead to some very complex-looking geometry node configurations:

Geometry nodes

But unfortunately I decided against this approach for two reasons, firstly Blender was really struggling rendering the trees and second of all the geometry nodes didn’t work quite the way I wanted them to:

Geometry nodes

So I decided instead to export the trees as glbs, additionally optimise the texture size and then to insert them into the world in Overte. Should there be any performance issues, I would introduce zones.

Add Buildings
#

  • Wind turbine

I got the wind turbine from Creazilla. Note that since we’re using an animation, we have to make a FSX file. I simply took what I’ve worked on from the previous Kafejo Fora version.

  • Antenna Tower: Place atop the mountain. Use a low-poly model (target: <1MB).
  • Houses: 2-3 small, modular designs. Reuse textures from the terrain (e.g., wooden walls = island texture).
  • Landing spot for hot air baloons: This will be implemented using voxels in Overte
  • Pier: Extend into the sea. Use planks and posts with a wooden texture (shared with houses).

Sound: Placeholder for wave sounds (add later in Ambient Sounds step).
#

Focal Points
#

Curate the Café
#

  • Model: Find a free, CC-licensed café model (e.g., from Sketchfab or BlenderKit).
    • Required objects: Chairs, tables, lightbulbs, coffee cups, muffins, cheese.
    • Display Screen: Use a flat plane with a video texture (for cinema) or a dynamic image (e.g., menu).
    • Web Tablet: Add a small interactive plane with a simple UI (e.g., buttons for day/night cycle).
  • Interior Design:
    • Place plants, books, and computers (Club Penguin style!) for coziness.
    • Use warm lighting (e.g., orange point lights for lamps).

Add Control Panel
#

  • Functionality:
    • Toggle day/night cycle (adjust sun position, sky color, and light intensity).
    • Toggle music (on/off + volume slider).
  • UI: Use HTML/CSS for the tablet interface (e.g., buttons with Esperanto labels: “Tago/Nokto”, “Muziko”).
  • Script Example:
    // Pseudocode for day/night toggle
    function toggleDayNight() {
      const isDay = world.getTime() === "day";
      world.setTime(isDay ? "night" : "day");
      world.setSkyColor(isDay ? "#000033" : "#87CEEB"); // Night/Day sky
    }
    

Finale
#

Hot air balloon
#

  • Hot air balloon + basket with controls

Details
#

  • Signage
  • Easter Eggs (like books, Esperanto flags, Linux Mint)
  • Wildlife

Publishing
#

  • Thumbnail
  • Server Deployment

Reflection
#

Some aspects of Overte are a bit rough, but Raspberry Pi and FOSS are just priceless

I will return to Overte world creation, because I enjoy making worlds. It can be very frustrating when looking for solutions, but while I am not drawn into Blender modelling, I find interior design uniquely satisfying. Club Penguin house decorated with lots of plants, computers etc.

I am someone who loves creating worlds, systems, devices etc and am not that drawn to the individual processes themselves (such as modelling), they are just a means of achieving the whole. I derive the joy from the assembly, though I am aware that that’s not as impressive.

But for now I want to focus on other projects. I’m not necessarily a VR fan, I’m definitely not buying a VR headset, I just like making worlds and comfortably exploring them :)

Reply by Email