Releases: func-godot/func_godot_plugin
FuncGodot 2025.12
What's Changed
- Include only plugin files for asset lib (.gitattributes) by @hoork in #159
- Use is_inside_tree instead of get_tree to check if the map is in the tree by @LogicAndTrick in #160
- Vertex Merge Distance by @LogicAndTrick in #164
- Skip attempting to auto-apply 'scale' property by @LogicAndTrick in #166
- Unwrap UV2 on smooth shaded meshes after smoothing process by @sinewavey in #163
- Correct Valve UV scale construction by @sinewavey in #169
- Support for -1 and -2 angle value Quake behavior by @EndersWilliam in #168
- Fix Model Point Class use default inverse scale factor in TrenchBroom exports by @benbot in #170
- Fix shader material generation creating deep duplicates by @RisingThumb in #180
- Dictionary[String, Variant] put in relevant places for entity classes by @RisingThumb in #179
- Add a list of groups as an option for all entities by @RisingThumb in #176
- Add Texture2D type check in FuncGodotUtil.load_texture() by @RhapsodyInGeek in #188
- Fix node_class check in entity assembler to support all script based classes by @avetharun in #194
- Fix invalid assignment error when calling QuakeWadFile._init by @TheLonerD in #202
- Remove Argument from FileAccess.get_text() call in Quake Map File Importer by @plaught-armor in #167
- Remove interior faces by @RisingThumb in #182
New Contributors
- @hoork made their first contribution in #159
- @EndersWilliam made their first contribution in #168
- @benbot made their first contribution in #170
- @avetharun made their first contribution in #194
- @TheLonerD made their first contribution in #202
- @plaught-armor made their first contribution in #167
Full Changelog: 2025.9...2025.12
FuncGodot 2025.9
A small update to prep for the Asset Library update. As that version is updated the least often, we decided to make sure the new vertex merge distance feature was added into it. More of a hot fix than a major update, but important nonetheless. This feature can reduce instances of gaps between polygon seams, a.k.a. "space ants" or "sparkles", on a per solid entity basis.
New Feature
- Added
vertex_merge_distance_propertyto Map Settings by @RhapsodyInGeek in 7e61c62
FuncGodot 2025.8.2
This update come with a lot of extremely welcome quality of life tweaks and bug fixes from multiple community members, chief among them a major fix by @sinewavey resolving a serious bug with tangents generation. Additionally the clip texture bug has been resolved, allowing entities to use clip collision generation once more.
With 2025.8.2 also comes changes to the mesh generation process, which now uses a "hypersquare" approach that should lead to more accurate and performant meshes.
And finally, the last mesh metadata feature has been reworked and re-added to func_godot: collision_shape_to_face_indices_map, from @LogicAndTrick. This replaces the old collision_shape_to_face_range_map feature, which was no longer valid due to the changes in the build process. The old property persists for now, to help users remember which entities used the feature so they can swap over to the replacement. The old property, add_collision_shape_face_range_metadata, will be removed in the next version.
New Features
- Implement the collision shape to face indices map metadata by @LogicAndTrick in #149
- Output
Dictionaryvalues for meta-properties as JSON-stringified represenations if targeting Trenchbroom by @Iikorni in #155 - Don't process for materials for brushes without visuals by @Iikorni in #156
Changes
- Generate vertices by clipping initial hypersquare with each face plane by @sinewavey in #144
Fixes
- Change NetRadiant gamepack entityclass to quake3 by @sinewavey in #135
- Export bool property defaults to FGD by @LogicAndTrick in #138
- Fix for string default values in 'choices' properties by @LogicAndTrick in #137
- Fix issues when loading materials without albedo textures by @suhankins in #139
- Reconstruct tangent for parallel U/V axes to planar normal by @sinewavey in #143
- Bug fixes for mesh metadata generation by @LogicAndTrick in #136
- Resolve UID path in verify() by @suhankins in #148
- Fixed loading of textures with spaces in their paths by @timothyqiu in #150
- Fix error when exporting FGD before exporting game config by @timothyqiu in #151
- Fix tangent array append index offset error, minor syntax cleanup by @sinewavey in #154
- Fix error on first map import by @timothyqiu in #153
- Fix Model Point Class Generate Size Property AABB Calculations by @RhapsodyInGeek in 81372c5
- Fix Clip Texture Bug and Code Cleanup by @RhapsodyInGeek in 0e6718d
Full Changelog: 2025.8.1...2025.8.2
FuncGodot 2025.8.1 Hot Fix
FuncGodot 2025.8.1 Hot Fix
- Meshes no longer build when the entity definition's
build_visualsproperty is disabled. Resolves #133. - Choices property type (Dictionary) no longer requires a description. It will pick either the first element of the Dictionary, or 0 if the Dictionary is empty for some reason. Resolves #120.
- StringName is now checked for when building the entity's properties dictionary, and the raw property string will be converted to a StringName. Resolves #98.
- FuncGodotLocalConfig now forces a reload of settings any time there is an attempt to retrieve a setting. This will hopefully resolve issues where game configurations or FGDs couldn't export.
- FuncGodotMap will fall back to itself as the scene root if it isn't a part of the Scene Tree (#132).
FuncGodot 2025.8
Core Rewrite Overview:
This update is a complete refactor of the core systems and build processes of FuncGodot. The goal of the Core Rewrite was to simplify the build process into something more manageable while taking advantage of the built-in Godot classes and methods to improve performance and reduce bloat. The build process has been simplified into 3 main sub-processes:
- Parsing
- Geometry Generation
- Entity Assembly
These are all run sequentially in the completely reworked FuncGodotMap node. The process should now be extremely straightforward and much easier to maintain and modify.
Compatibility
One of the main goals for this rewrite was to also make sure that the way you interfaced with FuncGodot remained as unchanged as possible. We didn't want to force users to re-do all of their entities or drastically change their workflow. There are a few significant breaking changes, but they are restricted to only a few top level classes so you won't have to go hunting around your entire FGD directory to resolve them. Those changes will be listed below.
Smooth Shading
Another major goal of the rewrite was to finally solve the smooth shading issues present since the Qodot days. Unfortunately we are so far unable to find a performant solution. Still, we felt the rewrite was strong and stable enough to share as is while we work on the solution we're seeking, while also inviting other members of the community to try their hand.
That said, we do have some foundations in place and look forward to trying to solve it under the new systems. Hopefully sooner rather than later.
VMF Parsing
Rewriting the Parser allowed the team to finally add VMF support to FuncGodot. It has been tested with maps made in both J.A.C.K. and Hammer (specifically the Black Mesa version of Hammer). It does not yet currently support displacements, but the way the new parser is written would allow it to be added fairly easily.
PatchDef
PatchDef support is still a work in progress. The new parser retrieves and packages PatchDef data, and there are methods in place in both the PatchData struct and in the Geometry Generator core class. It doesn't currently build, but we've had some promising tests (just not as much free time to finish the feature).
Groups Hierarchy
Groups are no longer "hacked in" like they were before. Instead they are created at the parsing stage, with support for complex group trees. For map files made in TrenchBroom, there is full support for Layers, Groups, and the layer omission feature; for VMF files you have VisGroups which can be given a tree organization fully represented by FuncGodot. If a layer in a MAP file is omitted in TrenchBroom, the entity and groups data belonging to that layer is deleted at the parsing stage so that it never gets built. This resolves a number of longstanding issues with the Groups Hierarchy system, including #82.
In-Editor Documentation
FuncGodot now takes full advantage of Godot's Documentation Comment System. Every single class added by FuncGodot is now fully commented using the documentation features and also includes many helpful links to external tutorials and documentation for FGD's and Quake mapping design patterns. This includes not only class properties but also methods. The FuncGodot Manual has been updated to make sure both the in-Editor documentation and the HTML based manual have parity.
The Future!
With this rewrite we added some long desired features to FuncGodot, wanted by both the team and many of our users. While we'll always look forward to PRs from community members, the next priorities that would make FuncGodot feel "feature complete" are probably PatchDef support, Source Displacements support and of course... proper Smooth Shading.
New to FuncGodot 2025.8
- Completely redesigned Core: FuncGodotMap, FuncGodotParser, FuncGodotGeometryGenerator, and FuncGodotEntityAssembler.
- Added
func_godot/default_inverse_scaleandfunc_godot/model_point_class_save_pathto Project Settings. These replace FuncGodotLocalConfig'sdefault_inverse_scaleandgame_path_models_folderrespectively. - Valve Map Format now supported.
- Added
build_flagsto FuncGodotMap. These act as modifiers to the FuncGodotMap build process. - Added
base_materials_dirto FuncGodotMapSettings. This acts as the save location for generated materials, allowing for separation of textures and materials. Falls back tobase_textures_dirif empty. Resolves #105. - PBR textures should now be able to generate with all texture maps located in the same folder as the main texture.
- Texture paths should now allow spaces in names.
- Fix resource (materials, sounds, etc.) values not being strings in FGD files by @ShadowFungi in #92
- Add support for custom classes by @sol-vin in #88
- NetRadiant Custom: Add maptype selection; fix shader output directories and spelling errors by @sinewavey in #101
- Add Rotation Offset Property to Model Point Class by @RhapsodyInGeek in #108
- Change export_func_godot_settings and reload_func_godot_settings to tool buttons by @suhankins in #110
- Prevent Texture Loader from Generating Origin Material by @RhapsodyInGeek in #109
- Verify Project Settings and Use Correct Setter for Default Map Settings by @RhapsodyInGeek in #122
Breaking Changes
- Removed
default_inverse_scaleandgame_path_models_folderfrom FuncGodotLocalConfig. It was decided that these are properties that should remain consistent across machines, while all properties in FuncGodotLocalConfig should be dependent upon the system. Make sure to update these in Project Settings if you use Model Point Class resources. - FuncGodotMap's
verify_and_build()is nowbuild(). - Removed
unwrap_uv2()from FuncGodotMap. This is now a Geometry Generator method. Use the FuncGodotMap UNWRAP_UV2build_flagto request an unwrap. - FuncGodotMapSettings'
use_trenchbroom_groups_hierarchyhas been renameduse_groups_hierarchy. Make sure to update your map settings if you use this feature!
Bug Fixes
- UV2 unwrapping should no longer affect meshes that weren't generated by FuncGodot. This should resolve #128.
- Layer omission works as intended and expected now, resolving #82.
New Contributors
- @ShadowFungi made their first contribution in #92
- @sol-vin made their first contribution in #88
- @suhankins made their first contribution in #110
Much of the Core Rewrite is thanks to @sinewavey leading the charge on a Geometry Generator redesign. We'd been working on this rewrite for months with her learning all about how to construct mesh geometry and surfaces from plane data utilizing Godot's internal tools while @RhapsodyInGeek developed a new parser and entity assembler, all while trying to make sure the way users interface with FuncGodot remained unchanged.
This was a major major undertaking and we couldn't be more proud of the work we've done so far. We're looking forward to seeing how you'll all take advantage of and expand on the new systems!
Full Changelog: 2025.1...2025.8
FuncGodot 2025.1
New to FuncGodot 2025.1:
- New Point Class Entity property
apply_scale_on_map_build: Toggles whether entity will usescaleto determine the generated node or scene's scale. This is performed on the top level node. The property can be a float, Vector3, or Vector2. Set tofalseif you would like to define how the generated node is scaled yourself. 4b6d60d - You can now select a default FuncGodotMapSettings for new FuncGodotMap nodes in the Project Settings. This addition comes from @ValorZard! #67
- Entity descriptions can now be multiple lines. #85
- TrenchBroom's Game Config Version 9 is now the default, compatible with the latest stable release of TrenchBroom. #80
Also a whole host of bug fixes and tweaks.
First release of the new year. While the things I was hoping to figure out didn't get figured out (regarding smooth shading and vertex merging issues specifically) we still got some neat features added. Hopefully we can figure out performant per entity phong this year!
FuncGodot 2024.3.1
2024.3.1 Hot Fix
- Solid Entity Origin Type Bounds calculations now correctly retrieve the bounding box dimensions. See #66 for more information. This could be considered a breaking change if you adapted your workflow to this particular bug.
New to FuncGodot 2024.3:
- New Entity property
auto_apply_to_matching_node_properties: Automatically applies entity class properties to matching properties in the generated node. This feature comes from @greenfox1505! - New Solid Entity feature Mesh Metadata: a group of properties that tell FuncGodot to add a "func_godot_mesh_data"] Dictionary to the metadata of the generated node upon build. This data is parallelized, so that each element of the array is ordered to reference the same face in the mesh.
add_textures_metadataadd_vertex_metadataadd_face_position_metadataadd_face_normal_metadataadd_collision_shape_face_range_metadata
Short list but the mesh metadata is a long requested major feature. The main purpose behind it is to allow devs to get the texture on a particular face of the map geometry, to allow for surface based effects like footsteps based on the ground texture or bullet decals based on the wall or ceiling, etc...
Godot separates Meshes and Collision, for a wide number of reasons. This makes it a complex undertaking trying to solve for the texture a character may be standing on or any other similar game mechanics. The new Mesh Metadata feature is our way of bridging that gap. You can read the discussion we had over it here. A number of us discussed it and came up with general designs and requirements for the feature but the brunt of the work and final implementation comes from @the-argus!
The feature is off by default and must be enabled in your own custom or duplicated entities. If wanting to use this feature on one of the default entities, be sure to copy the definitions outside the addons folder, as any changes will be overwritten with every update to the plugin. Be sure to read the Manual to understand how it works!
Speaking of The Manual, it's been updated to not only include the new features but also for slight improvements to readability. Linking to individual pages should also work properly now.
Lastly, we'll finally be getting FuncGodot on AssetLib. We want to thank you for your patience on this. Stay tuned for a brief announcement on this!
And yes, Phong is still broken. Working on that.
Looking forward to all of your surface shenanigans experiments and showcases!
@RhapsodyInGeek
FuncGodot 2024.2
New to FuncGodot 2024.2:
func_geois now an official default entity and the recommended way to construct occluding colliding geometry.- FuncGodotFGDFile's
model_keyword_supportedproperty changed totarget_map_editorfor better clarity and potential future features. - Added support for the Half-Life WAD3 format. They are still imported as QuakeWadFile resources, but FuncGodot will automatically determine whether the format is Quake's WAD2 or Half-Life's WAD3.
- Changed Solid Entity Origin Type
IGNOREtoAVERAGED, which better reflects how the origin is determined under this setting (by averaging all of the brush vertices positions). Due to its unpredictability, it is no longer the default origin type. - New Solid Entity Origin Type
BRUSH: emulates the Half-Life origin brush used for rotating objects. This new addition comes from @jpiolho! - Origin Texture property added to FuncGodotMapSettings, to be used with new Brush origin type.
- New Solid Entity Origin Type
BOUNDS_CENTER: Uses the center of the entity's bounding box to determine the origin. This replaces the previous default of Ignore, now named Averaged, due to its better build predictability. - New Solid Entity Origin Type
BOUNDS_MINS: Uses the lowest values of the entity's bounding box to determine the origin. This emulates default Quake and Half-Life behavior. - New Solid Entity Origin Type
BOUNDS_MAXS: Uses the highest values of the entity's bounding box to determine the origin. use_trenchbroom_groups_hierarchyno longer generates omitted layers. They are now skipped entirely in the build process.- Removed the
unshadedproperty from FuncGodotMapSettings, an old carryover from Qodot. This also had the effect of not allowing newly generated materials to use Vertex Shading, even if the Default Material specified it. A generated material's shading is now solely decided by the FuncGodotMapSettings' Default Material.
TrenchBroom Features
- A textures folder can now be specified for TrenchBroom configurations.
- A palette file can be specified for TrenchBroom configurations when using Quake WAD2 files. This is not needed if using Half-Life WAD3 files.
- Compatibility support for TrenchBroom Game Config Version 4. This addition comes from @Pesquisador-Stefano and allows for other compatibility patches if needed. Default will always be Latest stable release.
- Compatibility support for TrenchBroom Game Config Version 9. This will become the default when TrenchBroom 2024.2 gets a Stable Release.
- Origin TrenchbroomTag added to default TrenchBroom Game Configs, to give origin brush faces translucency like Skip and Clip.
NetRadiant-Custom Features
- You can now customize the Default Build Menu XML when generating NetRadiant-Custom Gamepacks using the new Default Build Menu Variables and Default Build Menu Commands properties. This addition comes from our new core team member, @sinewavey!
- Origin NetRadiantCustomShader added to the default NetRadiantCustomGamepackConfig, to give origin brush faces translucency like Skip and Clip.
The included documentation has been brought up to date with all of the new features, including the addition of a short guide on the new Origin Texture feature.
In addition to the new features, there have been a large number of bug fixes and optimizations made. This release has been pretty thoroughly tested, but if you do find any issues be sure to report them to the tracker!
Phong shading only working per brush rather than per entity is a known issue. We're having some trouble solving this performantly in GDScript and welcome any help in tackling this problem!
Hope you all build some more awesome things with this new release!
@RhapsodyInGeek
FuncGodot 2024.1.1
Bug fixes