• Resources
  • Qodot - Quake .map file support for Godot

Qodot

GitHub - ShiftyAxel/Qodot

Qodot extends the Godot editor to import Quake .map files, and provides an extensible framework for converting the entities and brushes contained therein into a scene-based node hierarchy with custom properties.

Image Heading

Why build Qodot?

A good 3D level editor is something I've been wanting for a long time across many projects, ever since I started using Unity back in the day. Having taken a detour through Unreal 4 and arrived at Godot, I've found that none of the major general-purpose engines scratch that itch. (Though I have to say, Godot's overall design and implementation makes it my favourite engine so far!)

After a recent dip back into old-school shooters, I found myself watching this trailer for the TrenchBroom editor:

Now, if you're anything like me - a programmer with little in the way of 3D modelling skill - that video might stir some feelings. Things like "where has this been all my life" and "I need this in a modern game engine right now".

I haven't touched a dedicated level editor since using SLADE and Doom Builder to make primitive levels for GZDoom back in the day, but seeing how simple Quake tech is while still providing rich editing was an eye-opener. I did some casual research into the map format, and lo and behold- id Software's generous open-sourcing meant that finding a detail spec was trivial.

And thus, Qodot was born. After about 48 solid hours of poring over text files, puzzling out how to create geometry from sets of intersecting planes, and reverse-engineering the format's undocumented triplanar UV system, I've built a solid tool that can produce 1:1 Godot representations of brush geometry, textures and basic (extendable) entities from a plaintext .map file.

Does Qodot work with other Quake editors, like Radiant?

Yes, providing they support the standard Quake 1 .map format. TrenchBroom is recommended and directly supported with an included set of customizable game definition files, but other editors will work just fine provided that they can support custom game definitions.

Afterword

Qodot is the first project I've managed to take from inception to public release in quite some time, in part due to the stumbling block of asset creation- I have countless Unity and UE4 projects sat on my hard drive that died as soon as their base gameplay concept was proven and it was time to actually make some levels. In a way, Qodot is a tool to deal with that personal stumbling block as much as one to improve upon the core Godot workflow!

I've submitted it for release on the Godot Asset Library, though it's still pending testing at the time of writing.

The GitHub repo might move fast for a while as I wrangle out some minor usability issues and add extras like shader surfaces and multi-threaded geometry generation, but releases will be tagged as appropriate as each feature reaches completion. Pull requests are encouraged and graciously accepted (providing that you don't scribble all over everything, of course ;))

Hopefully someone out there will be able to make use of Qodot- drop me a line if you do, I'd be happy to hear about your experience with it :)

I added some tags to the topic, hope you don't mind. Though you should be able to edit the OP yourself, if you need any further help editing it let us know. :)

Also note that if you want to include a change log for future updates you can just maintain a github gist and link it in the OP, it will be automatically embedded. ;)

@Megalomaniak said: I added some tags to the topic, hope you don't mind. Though you should be able to edit the OP yourself, if you need any further help editing it let us know. :)

Also note that if you want to include a change log for future updates you can just maintain a github gist and link it in the OP, it will be automatically embedded. ;)

I don't mind at all, thank you for that! With any luck that'll give folks a better idea of what they're looking at :)

And ah, I see the little cog- I still need to wrap my head around the forum UI, but should be good to get it cleaned up now.

Qodot 1.2.0 is out now!

1.2.0 brings full support for Quake's variant map formats, including Valve 220-style UV mapping for texture skewing, along with upgraded custom node spawning and some internal structural improvements.

Note that this release includes breaking changes, so maps will need to be reimported under the Standard preset and QuakeMapNode instances will need to be replaced with QodotMap instances.

Qodot v1.2.0 on GitHub

Qodot 1.3.0 is out now!

1.3.0 brings multithreaded geometry generation, automatic PBR texture and material lookup, overhauled map import / custom node pipelines, SKIP and CLIP special texture support, along with a slew of fixes.

It's also MIT-licensed like most other Godot plugins to minimize any legalities that might block its usage in any given project.

Note that this release includes breaking changes, so maps will need to be reimported and QodotMap node instances updated with any new parameters.

Qodot v1.3.0 on GitHub

Qodot 1.4.0 is out now!

1.4.0 brings extensive upgrades and optimizations to both the build pipeline and generated geometry. Draw calls are massively reduced, and the build system can now be customized to generate optimal geometry for a variety of use-cases.

Qodot v1.4.0 on GitHub

9 days later

Qodot 1.5.0 is out now!

1.5.0 features an overhauled build pipeline system, updated inspector UI, support for atlased meshes, concave collision, granular geometry splitting, static lighting, WAD file import, automatic map format detection, and basic Quake-style lighting support among various other upgrades and fixes.

Qodot 1.5.0 on GitHub

Qodot 1.5.1 is now available

1.5.1 is a minor hotfix release that addresses a missing shader, as well as a hanging test file present in the repo root.

Qodot 1.5.1 on Github

Qodot 1.5.2 is now available

1.5.2 is a hotfix release to address incorrect threading behavior under Godot 3.2 beta 4.

Qodot 1.5.2 on Github

2 months later

Qodot 1.6.0 is now available!

Featuring a rewrite of the map building core in GDNative C, a major Quake-patterned build system restructure, FGD and TrenchBroom game configuration export, custom entity support, nested tree hierarchies, real-time build updates, and much more. This is a big one!

Features - Native rewrite of core map building logic in C - Major build system restructure - Full FGD Export (Thanks to lordee, DistractedMOSFET and winadam for initial implementation) - TrenchBroom Game Config Export - Tree hierarchy conversion for nested TrenchBroom groups - Real-time build visualization and step name updates - Floating point support for color properties

Fixes - Fix map geometry not being interactible in the 3D viewport until a scene switch occurs - Fix WAD textures not being used during map build - Prevent duplicate vertices from being generated during collision build - Typed GDScript pass (Thanks to fossegutten)

Misc - Switched back to a single-threaded build structure - Removed custom build steps - Removed atlased mesh functionality - Removed pre-built TrenchBroom game config from the qodot-extras repo

You can find an in-depth changelog on the GitHub release page: Qodot 1.6.0 - GitHub

The Qodot Wiki has also been restructured and rewritten with up-to-date documentation on the new features, and some brand-new gifs to illustrate certain workflows: Qodot Wiki - GitHub

a year later

Hello, Could someone tell me how to only disable generating collision shapes on some brushes? I have a stairs made in trenchbroom and I want to disable collisionshape generation for these step brushes so that later on in the same place in the scene an object with a clip texture and this object has collisions (like a slope)? Is it possible? How to do that?

I have another problem with using entity and navmesh. Qodotmap node has to be a child of NavigationMeshInstance, I have an point entity on level point which is responsible for player, how to make this entity not be taken into account when counting navmesh without manually pulling it out of the tree every time I do level build?

@beetbeet - I’m not sure the Qodot developer(s) check the forums very often, so they might not be seeing your posts. I personally do not have any experience with Qodot, so I’m unsure on the answers to your questions.

I would suggest asking on the Qodot Discord Server to see if the users there know the answer. If they do not know, I might suggest then opening a GitHub issue.

a month later

Really happy to see this exists. When I first heard about TrenchBroom I was tempted, but couldn't justify the time -- now it's even more tempting. Used to love making stuff in Hammer.

4 months later

Love this resource, but it seems to crash a lot when trying to import large .map files, or refuses to save them as scenes despite opening.

@crogaro said: Love this resource, but it seems to crash a lot when trying to import large .map files, or refuses to save them as scenes despite opening.

Bugs should be reported on its issue tracker. Make sure to include the .map files in question :)