BBMOD 3.99.0 Alpha 1 released!
Feb 12, 2026, by kraifpatrik
Hey everyone,
Since my last announcement, I've mostly just been vibe-coding in the bbmod3-dev branch. No roadmap, no pressure - just building and experimenting for fun. Some of it started as small ideas and technical experiments, but over time it grew into something more cohesive. It's now at a point where I think sharing it could actually be useful to some of you. So I've decided to release it as 3.99.0-alpha1.
This isn't a shift back to scheduled releases or long-term commitments. It's simply me opening up what I've been working on and letting those who are curious try it out. BBMOD 3 is still the focus, and this alpha is part of shaping what I see as its eventual feature-complete form. If you're interested in exploring the new additions and helping test things out, I'd love to hear your feedback. If you'd rather stick with 3.22.5, that's completely fine too.
Let's take a look at what's new.
-- Patrik
Updated Assimp
Assimp has been updated from v5.4.3 to v6.0.2. In my testing, this resolves several animation-related issues that previously affected BBMOD imports.
Automatic model conversion
This is probably the most impactful addition in this release. You can now place models into an assets/ folder in the root directory of your project. On the next build, they will be automatically converted into BBMOD format and placed into datafiles/assets/, preserving the original folder structure.

You can define conversion arguments per model in bbmod.conf.json:
{
"commonArgs": "-lf=false -zup=true",
"models": {
"assets/Player.gltf": {
"args": "-oa=0"
},
"assets/Zombie.gltf": {
"args": "-oa=2"
},
"assets/Car.gltf": {
"args": "-pt=true"
}
}
}
A bbmod.cache.json file will be generated automatically during build. It tracks which models were converted and with what arguments. If nothing changes, conversion is skipped on the next build. If anything goes wrong, you can safely delete the cache file and force a full reconversion.
Requires Python 3 to be installed on your machine and Preferences > General settings > Automatically reload changed files needs to be enabled in your GameMake IDE for this to work properly!
New shader includes system
The new splash screen tool also handles automatic shader snippet imports. Previously, BBMOD relied on Xpanda, which is powerful but not designed to ship directly with BBMOD. This new system is simpler and fully integrated. To use it:
- Create a
shader_includes/folder in your project root. - Place
.glslfiles inside. - Use
// @include ShaderNamein your shader.
During build, the contents of shader_includes/ShaderName.glsl will be automatically inserted after the include comment. Includes can reference other includes as well. BBMOD's own shaders don't use this system yet, but it's available now and ready to use.
Synchronous resource loading
Working with BBMOD_ResourceManager.load can be a little annoying because of the required callback. For simple use cases, they add mental overhead and make otherwise straightforward code harder to read and structure. That's why I've added a new method:
load_sync(_path[, _sha1])
It loads the resource synchronously and returns it immediately, making certain workflows much cleaner and easier to reason about.
Layered animation player
A new animation system allows you to play different animations on different parts of a model simultaneously.
Example usage:
// Load a model
model = BBMOD_RESOURCE_MANAGER.load_sync("aassets/Character.bbmod").freeze();
// Load its animations
animIdle = BBMOD_RESOURCE_MANAGER.load_sync("assets/Character_Idle.bbanim");
animWalk = BBMOD_RESOURCE_MANAGER.load_sync("assets/Character_Walk.bbanim");
animRun = BBMOD_RESOURCE_MANAGER.load_sync("assets/Character_Run.bbanim");
animShoot = BBMOD_RESOURCE_MANAGER.load_sync("assets/Character_Shoot.bbanim");
animJump = BBMOD_RESOURCE_MANAGER.load_sync("assets/Character_Jump.bbanim");
// Create the animation player
animationPlayer = new BBMOD_LayeredAnimationPlayer(model);
// Play "idle" animation on the default layer (always present). You can later
// use to to play the "walk" or "run" animation instead.
var _layerDefault = animationPlayer.get_layer("Default");
_layerDefault.play(animIdle, true);
// Create a mask animations that affect just the upper body
var _upperBodyMask = new BBMOD_SkeletonMask(model);
_upperBodyMask.set_node_mask_recursive("Spine", 1.0);
// Add a separate layer for "shoot" animation, with the mask applied
layerShoot = new BBMOD_AnimationLayer("Shoot");
layerShoot.Mask = _upperBodyMask;
animationPlayer.add_layer(layerShoot);
layerShoot.play(animShoot, true);
// Add a layer for "jump" animation that overrides all layer below
layerJump = new BBMOD_AnimationLayer("Jump");
layerJump.Weight = 0; // Weight 0 = no effect, 1 = full effect
animationPlayer.add_layer(layerJump);
layerJump.play(animJump, true);
// Additive layers are also possible:
var _torsoNodeId = 1;
var _torsoAngle = 60;
var _torsoMask = new BBMOD_SkeletonMask(model);
_torsoMask.set_node_mask(_torsoNodeId, 1.0);
layerTorso = new BBMOD_AnimationLayer("Torso");
layerTorso.Mask = _torsoMask;
layerTorso.Additive = true;
layerTorso.set_node_rotation(
_torsoNodeId,
new BBMOD_Quaternion().FromAxisAngle(BBMOD_VEC3_RIGHT, _torsoAngle)
);
animationPlayer.add_layer(layerTorso);
Support for ColMesh v2
Support for ColMesh v2 has been added and you can now use:
bbmod_model_to_colmesh2(_model, _colmesh[, _transform])
ColMesh v2 is now included directly with the release, so there's no need to download it separately. Its license text is available in the datafiles folder.
What didn't make it in (yet)
The bbmod3-dev branch also contains a work-in-progress physics module built on the Bullet physics engine. It already supports ragdolls and vehicles, but it's still unfinished. I wanted to show it here to give you a glimpse of what's currently being explored.
Download
Additional improvements and fixes are included in this release. You can find the full changelog, HTML documentation and the *.yymps file on GitHub:
https://github.com/blueburncz/BBMOD/releases/tag/3.99.0-alpha1
Happy 3D game making!
Written by kraifpatrik
kraifpatrik is a founding member of BlueBurn and the lead developer of BBMOD. He has been passionate about 3D development in GameMaker since his early days with Game Maker 6. His mission is to make 3D game development in GM accessible to everyone. Outside of coding, he's a husband and father who enjoys 2000s video games, working out, and playing his 8-string Ibanez.