Skip to content

Releases: func-godot/func_godot_plugin

FuncGodot 2025.12

28 Dec 01:02

Choose a tag to compare

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

Full Changelog: 2025.9...2025.12

FuncGodot 2025.9

02 Sep 18:22

Choose a tag to compare

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

FuncGodot 2025.8.2

31 Aug 17:04
1767a7c

Choose a tag to compare

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 Dictionary values 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

Full Changelog: 2025.8.1...2025.8.2

FuncGodot 2025.8.1 Hot Fix

08 Aug 01:50

Choose a tag to compare

FuncGodot 2025.8.1 Hot Fix

  • Meshes no longer build when the entity definition's build_visuals property 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

06 Aug 23:59

Choose a tag to compare

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_scale and func_godot/model_point_class_save_path to Project Settings. These replace FuncGodotLocalConfig's default_inverse_scale and game_path_models_folder respectively.
  • Valve Map Format now supported.
  • Added build_flags to FuncGodotMap. These act as modifiers to the FuncGodotMap build process.
  • Added base_materials_dir to FuncGodotMapSettings. This acts as the save location for generated materials, allowing for separation of textures and materials. Falls back to base_textures_dir if 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_scale and game_path_models_folder from 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 now build().
  • Removed unwrap_uv2() from FuncGodotMap. This is now a Geometry Generator method. Use the FuncGodotMap UNWRAP_UV2 build_flag to request an unwrap.
  • FuncGodotMapSettings' use_trenchbroom_groups_hierarchy has been renamed use_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

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

28 Feb 23:32

Choose a tag to compare

New to FuncGodot 2025.1:

  • New Point Class Entity property apply_scale_on_map_build: Toggles whether entity will use scale to 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 to false if 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!

@RhapsodyInGeek

FuncGodot 2024.3.1

27 Nov 05:36
157e7a3

Choose a tag to compare

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_metadata
    • add_vertex_metadata
    • add_face_position_metadata
    • add_face_normal_metadata
    • add_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

02 Nov 22:52
efa93ad

Choose a tag to compare

New to FuncGodot 2024.2:

  • func_geo is now an official default entity and the recommended way to construct occluding colliding geometry.
  • FuncGodotFGDFile's model_keyword_supported property changed to target_map_editor for 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 IGNORE to AVERAGED, 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_hierarchy no longer generates omitted layers. They are now skipped entirely in the build process.
  • Removed the unshaded property 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

07 Mar 04:10

Choose a tag to compare

Bug fixes