The jfg64 Blender add-on
jfg64 is a Blender add-on (Blender 3.5 or newer) for making level geometry for JFG-Studio. It makes the common steps quick and shows the game’s budgets while you model. It writes nothing Studio can’t also read from a plain glTF export, so it’s optional: Modelling a level covers doing it all by hand.
Install
Get the zip
Download jfg64.zip from the add-on’s Releases page. Or clone
VibinToast/jfg64-blender and zip its jfg64 folder yourself, so the zip
holds jfg64/__init__.py. GitHub’s green “Download ZIP” button gives a jfg64-blender-main folder, which Blender can’t
load as an add-on.
Install it in Blender
Edit › Preferences › Add-ons › Install…, pick the zip, and tick jfg64: Jet Force Gemini levels.
Open the panel
In the 3D View press N for the sidebar and pick the JFG tab.
The panel
A diagram of the panel’s layout (the numbers are an example scene).
Surface
Makes the active object’s active material one kind of surface. It puts the surface’s word in the material’s name and sets the custom properties the game’s track importer reads:
| Button | The game | Material |
|---|---|---|
| Solid | Ground and walls | Opaque |
| Water | A water surface: the hero swims below it. Make it a flat face at the water’s height, with alpha in the texture | See-through |
| Lava | A damage floor: pushes the hero and hurts | Opaque |
| Kill | A pit floor that kills, below a drop | Opaque |
| Collider | Invisible but solid: walls that block without being drawn | Opaque |
| Nocollide | Drawn but not solid: grass tufts, decoration | Opaque |
The line above the buttons shows the active material and the surface it is now.
Vertex light
The game lights its levels with vertex colours. Bake vertex light writes a sun and an ambient colour into the
selected meshes’ vertex colours (a Col byte colour attribute on face corners): each face gets ambient plus sun ×
how much it faces the sun. A Sun lamp in the scene sets the direction; without one, Sun direction does.
Bake again after you change the model.
Budgets
Counted live over the visible objects:
- triangles in the level;
- images: each new image becomes a new 3D texture, and the game’s table has room for about three. The count turns red past that. Reuse images between materials;
- farthest vertex from the origin: the game takes up to 32767 units. Red past that;
- the surfaces in use.
Markers
Empties at the 3D cursor that Studio turns into objects when it makes the first level from the file:
| Marker | Becomes | Default fields |
|---|---|---|
| Startpoint | A start point; its arrow is the facing | player 0, startPoint 0 |
| Exit | An exit (set where it leads in Studio) | radius 60 |
| Health | A health pickup | amount 0 |
| Regionpoint | A navigation region corner | region 1, corner 0 |
| Other | Any type: set Type to stock:objtype/0x… |
With a marker selected, Type and Fields (JSON) are editable in the panel, e.g. {"startPoint": 1} for a second
start point.
Markers are read when Studio makes a level from a new file (File › New project with the .glb, or the first
Import geometry into an empty project). Re-exporting later updates the geometry, not the objects: place further
objects in Studio.
Export for JFG-Studio
Writes a .glb of the visible objects with the settings Studio needs: +Y up, custom properties, modifiers applied,
vertex colours, no animation, cameras or lights. It refuses to export if a vertex is past 32767 and reports the
triangle and image counts.
Into Studio
- First time: File › New project… with the
.glbas Geometry, or File › Import geometry… into a project. - After changes: export over the file in the project’s
geometry/folder (or import it again). The Scene reloads it. - Read the check in Studio’s Console: segments, batches, triangles, textures and new images, whether it fits the game’s track buffer, and which special surfaces it found.