From 2b355d0ed84a11827f23e1647848951c27e3594f Mon Sep 17 00:00:00 2001 From: daddy Date: Thu, 17 Sep 2026 23:35:33 +0000 Subject: [PATCH] feat(editor): add bundled 3D prop models and sample picker in Creator Studio --- assets/editor/object_catalog.json | 6 + assets/props/buffalo_chip_coin.glb | Bin 0 -> 31528 bytes assets/props/buffalo_chip_coin.glb.import | 42 ++++++ assets/props/chest.glb | Bin 0 -> 3956 bytes assets/props/chest.glb.import | 42 ++++++ assets/props/crate_small.glb | Bin 0 -> 2852 bytes assets/props/crate_small.glb.import | 42 ++++++ assets/props/lamp_post_01.glb | Bin 0 -> 34328 bytes assets/props/lamp_post_01.glb.import | 42 ++++++ assets/props/rock_01.glb | Bin 0 -> 5632 bytes assets/props/rock_01.glb.import | 42 ++++++ assets/props/tree_pine_01.glb | Bin 0 -> 59136 bytes assets/props/tree_pine_01.glb.import | 42 ++++++ export_presets.cfg | 4 +- scripts/editor/ui/palette_panel.gd | 31 ++++- scripts/generate_props.gd | 152 ++++++++++++++++++++++ scripts/static_object_node.gd | 1 + scripts/verify_export_contents.gd | 1 + 18 files changed, 444 insertions(+), 3 deletions(-) create mode 100644 assets/props/buffalo_chip_coin.glb create mode 100644 assets/props/buffalo_chip_coin.glb.import create mode 100644 assets/props/chest.glb create mode 100644 assets/props/chest.glb.import create mode 100644 assets/props/crate_small.glb create mode 100644 assets/props/crate_small.glb.import create mode 100644 assets/props/lamp_post_01.glb create mode 100644 assets/props/lamp_post_01.glb.import create mode 100644 assets/props/rock_01.glb create mode 100644 assets/props/rock_01.glb.import create mode 100644 assets/props/tree_pine_01.glb create mode 100644 assets/props/tree_pine_01.glb.import create mode 100644 scripts/generate_props.gd diff --git a/assets/editor/object_catalog.json b/assets/editor/object_catalog.json index e27dd11..1b11de4 100644 --- a/assets/editor/object_catalog.json +++ b/assets/editor/object_catalog.json @@ -30,6 +30,12 @@ "display_name": "Treasure Chest", "category": "interactables" }, + "buffalo_chip_coin": { + "asset_id": "props/buffalo_chip_coin.glb", + "type": "prop", + "display_name": "Buffalo Chip Coin", + "category": "props" + }, "spawn_point": { "asset_id": "", "type": "spawn_point", diff --git a/assets/props/buffalo_chip_coin.glb b/assets/props/buffalo_chip_coin.glb new file mode 100644 index 0000000000000000000000000000000000000000..cc048a888c3dad5693b4e53036037d11042612c6 GIT binary patch literal 31528 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 literal 0 HcmV?d00001 diff --git a/assets/props/crate_small.glb.import b/assets/props/crate_small.glb.import new file mode 100644 index 0000000..5f71557 --- /dev/null +++ b/assets/props/crate_small.glb.import @@ -0,0 +1,42 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://n18xbm0q3jai" +path="res://.godot/imported/crate_small.glb-e6fdaf315193cd20d4514609adaa68f2.scn" + +[deps] + +source_file="res://assets/props/crate_small.glb" +dest_files=["res://.godot/imported/crate_small.glb-e6fdaf315193cd20d4514609adaa68f2.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/root_script=null +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +nodes/use_name_suffixes=true +nodes/use_node_type_suffixes=true +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +materials/extract=0 +materials/extract_format=0 +materials/extract_path="" +_subresources={} +gltf/naming_version=2 +gltf/embedded_image_handling=1 diff --git a/assets/props/lamp_post_01.glb b/assets/props/lamp_post_01.glb new file mode 100644 index 0000000000000000000000000000000000000000..3f4c19903856f8c0290014dc79c588c2afaac702 GIT binary patch literal 34328 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 literal 0 HcmV?d00001 diff --git a/assets/props/lamp_post_01.glb.import b/assets/props/lamp_post_01.glb.import new file mode 100644 index 0000000..5e75658 --- /dev/null +++ b/assets/props/lamp_post_01.glb.import @@ -0,0 +1,42 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://b3nfmxbm87pl3" +path="res://.godot/imported/lamp_post_01.glb-eea7873c5c7bafcb4d19a09b9d97e53c.scn" + +[deps] + +source_file="res://assets/props/lamp_post_01.glb" +dest_files=["res://.godot/imported/lamp_post_01.glb-eea7873c5c7bafcb4d19a09b9d97e53c.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/root_script=null +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +nodes/use_name_suffixes=true +nodes/use_node_type_suffixes=true +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +materials/extract=0 +materials/extract_format=0 +materials/extract_path="" +_subresources={} +gltf/naming_version=2 +gltf/embedded_image_handling=1 diff --git a/assets/props/rock_01.glb b/assets/props/rock_01.glb new file mode 100644 index 0000000000000000000000000000000000000000..215f2b8e31ed8d2aad0446b4eb1354d394178b59 GIT binary patch literal 5632 zcmeHIS!^5E6&>xdcAHvlE!0@MxXf^7I73RBku1rE3|nk%HMQXy5=9MV0u(8bLph0{ zmMGE$NK!axA@n03E*d9DKJ=AEN!rZFC}0BxQU_@I6|^pbqIMgnc99kqoC58=kB`Z!+L`dK!}x!6c@aVeS56UOwDOFA2rc%L7QnS{XxWuJ>(3_k(eIFF==0m(1>C0-U4 zza+ajk0=K4qbQsl;AEZ?!S-dh)4&i*0E2tynhR_@Iqu^KB#C5dF&vLQrO&g$XgHqM zU93S8W*?sz6WCSPy@l})TNv-*AZyNr2;c2=(ct!Zcu5XOyd-dvAj-0+yE)0_-gf@V zw8R~0K|de1-_UHo;umCD@=1a(;3pY!9%2qi0-OLZaXxuF;hk%_M4_L!N#;bqz$tiq z{{Oz8!ow!M-J0C7V{hU6poqR5trG7SksK=-O+kP$&CRCF-)+KI$2mSWdSvt%y9(~% zbXtc2Utt&Ygq{i;$rKx84<+Z5hI1mZ5KHLJWzpmJ_&jMNJQvqJ$!IhdiG|}MG9MKL zF(610j^hG8abDyEQB-t)K$(wI#pdBo@-Q|=IJJNoLu|iqd)jww=6MOcad#*hB{lA(gU&rH z-QCT3HXp~s_Ww0INv50c(!t|#FP-x6$&nebmnw+TmueI6uyZdS?YXVdf*kPSy8eWr zC-A7!-%8{Aa*90^8V^m+q+^MNxIU9gCJh$c7Q=>~f*HsWEzPBl>P9#ok426pGYe-D z@WkRk&4ttYSTdeW9SldvSi#%L%bXt`I-kgiqMw7e60XF3Z2>6|5aG4)^NPazpcwij z(Li}hyi{x|A9dTRkoPzs`*}&>MIXP4)h+7jGdj&V6We$X$YN;)AmDZv!7043>_-jV6>t%EirRfG(>}r}M*VhB+`fh5wXHH2No% z2oILC=tuog&OSg!_q;!mr`E2hg@=EjUisdTiZUYVC|@l7@qU}#yjbe!r2Zz@P3mug zKao40`_2WMozy`6iG1VLbLubLx70fyy{@8+h&swA&K7st?BcXV6)%DkA+P*J{W$_s@JYx`i+V*BI+n#^mKLF?B+$!E1lHe0=r55P4Kr+ZohQ< zg3V51QGX3%9d>;1em)k;`B*6DV^KSaMg2*vyd7hqoR3BABo_52u|9kCocVLwLzJ;+ zsH2?kA+?hpQh(CJydC^alnZGOshz~4{zML~UBR4Hv2vN*h83G6A?cTkh3-)lyT;9?|+hE$X5 zqkJCq=h6J&3|RL2@&9+fNOfB7zJI-P`0C3Wzq+)f&3v}5`u~Y?=7(Z@W#3sDp)q(2YKjL#x!oNn?oR91-^6t%$UdnsM`5&+rJkMhYFAgl{^qmF^Oalb)87qhFMM&E#QNQ8P&+y6wN6xR zneT!RTeM}uehYbkPyTlKmWe!os-6Ftcg}A_D%aGP{%mMkzgzob&6;|Jb8Au1FITOp zB|k|jFL~YC3ywAQ^?o;*r=QiWsi&?RmgR9<3hZriyDivnArJ7$&w`FTfSR5E#dptd zoZPc!zH!~q_71o;zH!Z*^SCwC(GKhKH(ex_`8jali9#$BV`TfsQAG13{ue&Xyz|PPjEOvlfX~j4J;8fz zoB6L zBg%t_Jc!6c?BIupJc!7Hh&+hMgUB!&iytGZIm}Yrq{wJFyOZJw#aW73ili>A5$gcN zd=N1oLQPY$sz)UhsN zhrAK7E<~&g5$i(4x)AY0&W`j9>&oeP?!-=fbLWow2-RmPqAjcKDqwb%7nBzklvfm1 z6ctuf7F8A(RaO;Ol@wQ1msFRQRM(W&l$F-hmeoF1R=fMLJ>|RhILaLr<&L_Fy2^^W z`pWvM%KCc*y;rrMgO=Gx}nwat5X?{n8rK`KOyREgmr>&>Gt*5uW z*V*3N=j`in_Vsu4vmN~d?7)6@z_s7q)#>(hdAhqi-fnMCx0mbTdV4s&m+$N4eSNyZ_&!g-Yd7vQ--kPrI!;Gl0%@C^!Qq4I@WDgszX2A! BvMvAs literal 0 HcmV?d00001 diff --git a/assets/props/rock_01.glb.import b/assets/props/rock_01.glb.import new file mode 100644 index 0000000..2e5b2fc --- /dev/null +++ b/assets/props/rock_01.glb.import @@ -0,0 +1,42 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://boi3fsj4ehqvb" +path="res://.godot/imported/rock_01.glb-b0b73bccccfa933f3863bdc2afcb3246.scn" + +[deps] + +source_file="res://assets/props/rock_01.glb" +dest_files=["res://.godot/imported/rock_01.glb-b0b73bccccfa933f3863bdc2afcb3246.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/root_script=null +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +nodes/use_name_suffixes=true +nodes/use_node_type_suffixes=true +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +materials/extract=0 +materials/extract_format=0 +materials/extract_path="" +_subresources={} +gltf/naming_version=2 +gltf/embedded_image_handling=1 diff --git a/assets/props/tree_pine_01.glb b/assets/props/tree_pine_01.glb new file mode 100644 index 0000000000000000000000000000000000000000..e963305d9c6291f46581a542e153caad7eef2f2d GIT binary patch literal 59136 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 K@H{WO@cb9SI7`a_ literal 0 HcmV?d00001 diff --git a/assets/props/tree_pine_01.glb.import b/assets/props/tree_pine_01.glb.import new file mode 100644 index 0000000..23015af --- /dev/null +++ b/assets/props/tree_pine_01.glb.import @@ -0,0 +1,42 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://b84vjc1c3d650" +path="res://.godot/imported/tree_pine_01.glb-519f726dc86fdb9eefd0928153fa0181.scn" + +[deps] + +source_file="res://assets/props/tree_pine_01.glb" +dest_files=["res://.godot/imported/tree_pine_01.glb-519f726dc86fdb9eefd0928153fa0181.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/root_script=null +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +nodes/use_name_suffixes=true +nodes/use_node_type_suffixes=true +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +materials/extract=0 +materials/extract_format=0 +materials/extract_path="" +_subresources={} +gltf/naming_version=2 +gltf/embedded_image_handling=1 diff --git a/export_presets.cfg b/export_presets.cfg index 571e2ae..38ea719 100644 --- a/export_presets.cfg +++ b/export_presets.cfg @@ -7,7 +7,7 @@ advanced_options=false dedicated_server=false custom_features="" export_filter="all_resources" -include_filter="*.json" +include_filter="*.json, *.glb" exclude_filter="" export_path="export/linux/modbison.x86_64" encryption_include_filters="" @@ -38,7 +38,7 @@ advanced_options=false dedicated_server=false custom_features="" export_filter="all_resources" -include_filter="*.json" +include_filter="*.json, *.glb" exclude_filter="" export_path="export/windows/modbison.exe" encryption_include_filters="" diff --git a/scripts/editor/ui/palette_panel.gd b/scripts/editor/ui/palette_panel.gd index bd628d1..842d146 100644 --- a/scripts/editor/ui/palette_panel.gd +++ b/scripts/editor/ui/palette_panel.gd @@ -92,11 +92,40 @@ func _setup_import_ui() -> void: path_row.add_child(_model_path_edit) _btn_browse = Button.new() - _btn_browse.text = "..." + _btn_browse.text = "Browse..." _btn_browse.pressed.connect(_on_browse_pressed) path_row.add_child(_btn_browse) _import_panel.add_child(path_row) + var sample_row := HBoxContainer.new() + var sample_lbl := Label.new() + sample_lbl.text = "Sample:" + sample_lbl.custom_minimum_size = Vector2(50, 0) + sample_row.add_child(sample_lbl) + + var sample_option := OptionButton.new() + sample_option.add_item("— Pick a sample model —", 0) + sample_option.add_item("Treasure Chest", 1) + sample_option.set_item_metadata(1, {"path": "res://assets/props/chest.glb", "name": "Treasure Chest"}) + sample_option.add_item("Pine Tree", 2) + sample_option.set_item_metadata(2, {"path": "res://assets/props/tree_pine_01.glb", "name": "Pine Tree"}) + sample_option.add_item("Lamp Post", 3) + sample_option.set_item_metadata(3, {"path": "res://assets/props/lamp_post_01.glb", "name": "Lamp Post"}) + sample_option.add_item("Buffalo Chip Coin", 4) + sample_option.set_item_metadata(4, {"path": "res://assets/props/buffalo_chip_coin.glb", "name": "Buffalo Chip Coin"}) + sample_option.add_item("Small Crate", 5) + sample_option.set_item_metadata(5, {"path": "res://assets/props/crate_small.glb", "name": "Small Crate"}) + sample_option.size_flags_horizontal = Control.SIZE_EXPAND_FILL + sample_option.item_selected.connect(func(idx: int): + if idx > 0: + var meta: Dictionary = sample_option.get_item_metadata(idx) + _model_path_edit.text = meta.get("path", "") + if _model_name_edit.text.strip_edges().is_empty(): + _model_name_edit.text = meta.get("name", "") + ) + sample_row.add_child(sample_option) + _import_panel.add_child(sample_row) + _import_status_label = Label.new() _import_status_label.text = "" _import_status_label.add_theme_font_size_override("font_size", 10) diff --git a/scripts/generate_props.gd b/scripts/generate_props.gd new file mode 100644 index 0000000..6faead5 --- /dev/null +++ b/scripts/generate_props.gd @@ -0,0 +1,152 @@ +extends SceneTree + +func _initialize() -> void: + _generate() + +func _save_model(root_node: Node3D, out_path: String) -> void: + var gltf := GLTFDocument.new() + var state := GLTFState.new() + var err := gltf.append_from_scene(root_node, state) + if err == OK: + var dir := out_path.get_base_dir() + DirAccess.make_dir_recursive_absolute(ProjectSettings.globalize_path(dir)) + var w_err := gltf.write_to_filesystem(state, out_path) + print("Saved %s: error=%d" % [out_path, w_err]) + else: + printerr("Failed append_from_scene for %s: %d" % [out_path, err]) + +func _generate() -> void: + print("Generating prop models...") + + # 1. Crate Small + var crate_root := Node3D.new() + var crate_mesh := MeshInstance3D.new() + var box := BoxMesh.new() + box.size = Vector3(1.0, 1.0, 1.0) + var mat_wood := StandardMaterial3D.new() + mat_wood.albedo_color = Color(0.6, 0.4, 0.2) + mat_wood.roughness = 0.8 + box.material = mat_wood + crate_mesh.mesh = box + crate_mesh.position.y = 0.5 + crate_root.add_child(crate_mesh) + _save_model(crate_root, "res://assets/props/crate_small.glb") + + # 2. Rock + var rock_root := Node3D.new() + var rock_mesh := MeshInstance3D.new() + var sphere := SphereMesh.new() + sphere.radius = 0.6 + sphere.height = 0.9 + sphere.radial_segments = 8 + sphere.rings = 6 + var mat_rock := StandardMaterial3D.new() + mat_rock.albedo_color = Color(0.45, 0.45, 0.48) + mat_rock.roughness = 0.9 + sphere.material = mat_rock + rock_mesh.mesh = sphere + rock_mesh.position.y = 0.45 + rock_root.add_child(rock_mesh) + _save_model(rock_root, "res://assets/props/rock_01.glb") + + # 3. Pine Tree + var tree_root := Node3D.new() + var trunk := MeshInstance3D.new() + var trunk_mesh := CylinderMesh.new() + trunk_mesh.top_radius = 0.15 + trunk_mesh.bottom_radius = 0.2 + trunk_mesh.height = 1.0 + var mat_trunk := StandardMaterial3D.new() + mat_trunk.albedo_color = Color(0.38, 0.25, 0.12) + mat_trunk.roughness = 0.9 + trunk_mesh.material = mat_trunk + trunk.mesh = trunk_mesh + trunk.position.y = 0.5 + tree_root.add_child(trunk) + + var foliage := MeshInstance3D.new() + var cone_mesh := CylinderMesh.new() + cone_mesh.top_radius = 0.0 + cone_mesh.bottom_radius = 0.9 + cone_mesh.height = 1.8 + var mat_leaf := StandardMaterial3D.new() + mat_leaf.albedo_color = Color(0.15, 0.45, 0.2) + mat_leaf.roughness = 0.7 + cone_mesh.material = mat_leaf + foliage.mesh = cone_mesh + foliage.position.y = 1.8 + tree_root.add_child(foliage) + _save_model(tree_root, "res://assets/props/tree_pine_01.glb") + + # 4. Lamp Post + var lamp_root := Node3D.new() + var pole := MeshInstance3D.new() + var pole_mesh := CylinderMesh.new() + pole_mesh.top_radius = 0.05 + pole_mesh.bottom_radius = 0.08 + pole_mesh.height = 2.4 + var mat_metal := StandardMaterial3D.new() + mat_metal.albedo_color = Color(0.2, 0.22, 0.25) + mat_metal.metallic = 0.8 + mat_metal.roughness = 0.3 + pole_mesh.material = mat_metal + pole.mesh = pole_mesh + pole.position.y = 1.2 + lamp_root.add_child(pole) + + var light_mesh := MeshInstance3D.new() + var light_box := BoxMesh.new() + light_box.size = Vector3(0.3, 0.35, 0.3) + var mat_glow := StandardMaterial3D.new() + mat_glow.albedo_color = Color(1.0, 0.9, 0.4) + mat_glow.emission_enabled = true + mat_glow.emission = Color(1.0, 0.85, 0.3) + mat_glow.emission_energy_multiplier = 2.0 + light_box.material = mat_glow + light_mesh.mesh = light_box + light_mesh.position.y = 2.4 + lamp_root.add_child(light_mesh) + _save_model(lamp_root, "res://assets/props/lamp_post_01.glb") + + # 5. Treasure Chest + var chest_root := Node3D.new() + var chest_body := MeshInstance3D.new() + var cbox := BoxMesh.new() + cbox.size = Vector3(0.9, 0.6, 0.6) + var mat_chest := StandardMaterial3D.new() + mat_chest.albedo_color = Color(0.45, 0.26, 0.12) + mat_chest.roughness = 0.6 + cbox.material = mat_chest + chest_body.mesh = cbox + chest_body.position.y = 0.3 + chest_root.add_child(chest_body) + + var latch := MeshInstance3D.new() + var latch_box := BoxMesh.new() + latch_box.size = Vector3(0.12, 0.15, 0.06) + var mat_gold := StandardMaterial3D.new() + mat_gold.albedo_color = Color(0.95, 0.8, 0.2) + mat_gold.metallic = 0.9 + mat_gold.roughness = 0.2 + latch_box.material = mat_gold + latch.mesh = latch_box + latch.position = Vector3(0, 0.35, 0.31) + chest_root.add_child(latch) + _save_model(chest_root, "res://assets/props/chest.glb") + + # 6. Buffalo Chip Coin + var coin_root := Node3D.new() + var coin_mesh := MeshInstance3D.new() + var cyl := CylinderMesh.new() + cyl.top_radius = 0.35 + cyl.bottom_radius = 0.35 + cyl.height = 0.08 + cyl.material = mat_gold + coin_mesh.mesh = cyl + coin_mesh.rotation_degrees = Vector3(90, 0, 0) + coin_mesh.position.y = 0.4 + coin_root.add_child(coin_mesh) + _save_model(coin_root, "res://assets/props/buffalo_chip_coin.glb") + + print("All prop models generated!") + quit(0) diff --git a/scripts/static_object_node.gd b/scripts/static_object_node.gd index 7be9f5a..70dfefb 100644 --- a/scripts/static_object_node.gd +++ b/scripts/static_object_node.gd @@ -95,6 +95,7 @@ func _try_load_asset(asset_id: String) -> Node: # 2. Try direct path or custom asset path var candidate_paths: Array[String] = [ asset_id, + "res://assets/%s" % asset_id, "user://custom_assets/%s" % asset_id, "user://custom_assets/%s" % asset_id.get_file() ] diff --git a/scripts/verify_export_contents.gd b/scripts/verify_export_contents.gd index 0c9411d..9ac909d 100644 --- a/scripts/verify_export_contents.gd +++ b/scripts/verify_export_contents.gd @@ -16,6 +16,7 @@ const PACK_PATH := "res://.export_check.pck" ## resources (so they only get packed via export_presets include_filter). const REQUIRED := [ "res://assets/avatars/catalog.json", + "res://assets/editor/object_catalog.json", ] ## A resource we know should be there, as a sanity check that the pack loaded.