Qodot 1.6.0
Note
Qodot 1.6.0 introduces major changes to the build system and plugin structure, as well as a dependency on native code. Make sure to reinstance your QodotMap node and rebuild any map files to ensure compatibility.
Features
-
Native rewrite of core map building logic in C
- Faster language and improved system structure resulting in greatly reduced build times
- Map loading and geometry generation is now handled by a C library called
libmap
- This functionality is bridged into Godot via a GDNative plugin called
libqodot
- Engine-specific functionality like texture loading and tree population lives in GDScript
-
Major build system restructure
- Built on top of a data-driven FGD pipeline
- Full control over brush and entity build behavior on a per-classname basis
- Designed to better match Quake's geometry and entity structure
-
Full FGD Export
- FGD files and their associated classes are codified as Resource types
- These contain map editor meta properties, entity properties, and Qodot-specific metadata
- Scene files can be defined for point entity classes, and instanced in the tree during build
- Script files can be defined for both point and brush entities, and attached to their respective nodes during build
- These extend the QodotEntity class, which provides a property dictionary and associated update callback
- Various build-time properties are now specified on a per-classname basis:
- Worldspawn merging
- Visual geometry
- Physics body type
- Collision object type
- Thanks to lordee, DistractedMOSFET and winadam for initial implementation
- FGD files and their associated classes are codified as Resource types
-
TrenchBroom Game Config Export
- TrenchBroom game configs are codified as resource types
- These contain TrenchBroom data such as game name, icon, game configuration and associated FGD files
- TrenchBroom game configs are codified as resource types
-
Nested TrenchBroom groups can be used to create a tree hierarchy
- The first entity in each group will be treated as the group's owner
- Structural brushes can be used freely inside nested groups
- Optional for compatibility with Quake's flat structure
-
Real-time build visualization using time-slicing and
yield
statements -
Real-time build step updates via QodotMap's node name
- Qodot 3.2 introduces the ability to rename nodes in the editor from tool scripts
- Allows QodotMap to display the current build step as a suffix
-
Floating point support for color properties
- Checks for the presence of a decimal point in the property string
- Corner case:
1 1 1
in floating-point format will be interpreted as byte-format
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
- A basic cube now only generates the 8 needed vertices, rather than 24 with duplicates
-
Typed GDScript pass
- Strong typing resulting in clearer, more maintainable code
- Thanks to fossegutten
Misc
-
Switched back to a single-threaded build structure
- No longer needed now the business logic lives in C
- Caused more problems than it solved, introduced a lot of bloat
- Some linux users were experiencing crashes due to multi-threading
-
Removed custom build steps
- No longer needed now entity types are data-driven
- Not used by most users
- Introduced a lot of structural dependency management
-
Removed atlased mesh functionality
- Built on top of broken functionality
- Missing a lot of features
- Added extra complexity to the build process
- May consider re-adding once proper texture array support is in place
-
Removed pre-built TrenchBroom game config from the qodot-extras repo
- Default Qodot FGD now lives inside the plugin, and can be exported from the editor